new function() {
// private static fields
var s_first = 1;
var s_second = 2;
// private static methods
function s_method1() {
s_first++;
}
var s_second = 2;
class6 = function() {
// private fields
var m_first = 1;
var m_second = 2;
// private methods
function method1() {
alert(m_first);
}
var method2 = function() {
alert(m_second);
}
// public fields
this.first = "first";
this.second = ['s','e','c','o','n','d'];
// public methods
this.method1 = function() {
s_second--;
}
this.method2 = function() {
alert(this.second);
}
// constructor
{
s_method1();
this.method1();
}
}
// public static methods
class6.method1 = function() {
s_first++;
alert(s_first);
}
class6.method2 = function() {
alert(s_second);
}
};
var o1 = new class6();
class6.method1();
class6.method2();
o1.method2();
var o2 = new class6();
class6.method1();
class6.method2();
o2.method2();
这个例子的结果跟通过第一种方式创建的例子是相同的。只不过它的静态封装环境是这样的:
new function() {
...
};
在这里,该函数没有返回值,并且对于 class5 的定义是直接在静态封装环境内部通过给一个没有用 var 定义的变量赋值的方式实现的。
当然,也完全可以在
(function() {
...
})();
这种方式中,不给该函数定义返回值,而直接在静态封装环境内部通过给一个没有用 var 定义的变量赋值的方式来实现带有私有静态成员的类的定义。
这两种方式在这里是等价的。
2.5 静态类
所谓的静态类,是一种不能够被实例化,并且只包含有静态成员的类。
在 JavaScript 中我们通过直接实例化一个匿名函数的对象,就可以实现静态类了。例如:
复制代码 代码如下:
class7 = new function() {
// private static fields
var s_first = 1;
var s_second = 2;
// private static method
function method1() {
alert(s_first);
}
// public static method
this.method1 = function() {
method1();
alert(s_second);
}
}
class7.method1();
大家会发现,class7 其实就是个对象,只不过这个对象所属的是匿名类,该类在创建完 class7 这个对象后,就不能再被使用了。而 class7 不是一个 function,所以不能够作为一个类被实例化,因此,这里它就相当于一个静态类了。
您可能感兴趣的文章: