我知道有两种方法可以在JavaScript中创建类
var MyObj = function(val)
{
this.vari = val;
}
其中val将是非静态成员。
然而,
var MyObj = new Object();
MyObj.vari = "";
这是一个单个对象,因此这里的成员将像静态成员一样。我的问题是,我们如何在同一个类中同时拥有静态内容和非静态内容?
答案 0 :(得分:3)
JavaScript中没有类,只有对象。
当你创建一个新对象时,你正在从函数的原型中“扩展”,而不是函数本身。为了使变量或函数看起来是静态的,你必须将它附加到用于创建对象的函数,而不是它的原型。
js> var Foo = function(){ this.member = "member"; };
js> Foo.staticMember = "staticMember";
js> var f = new Foo();
js> Foo.member;
undefined
js> Foo.staticMember;
"staticMember"
js> f.member;
"member"
js> f.staticMember;
undefined
答案 1 :(得分:2)
使用你的第一个例子:
var MyObj = function(val) {
this.vari = val;
};
MyObj.var2=value;
将创建一个可调用的新“静态”属性:
var o = MyObj.var2;
答案 2 :(得分:1)
第一个用匿名函数初始化MyObj变量 - 它不创建类。 MyObj稍后可以用作初始化一个对象字段的对象构造函数 - vari。 OOP意义上没有任何“统计”。
第二个创建Object类型的对象并初始化其属性。再一次,没有什么是静态的。
在OOP中,“statis”表示该类的成员,例如属于类定义的变量和对象。例如,以下架构演示了这一概念:
function MyClass() {
this.objectProperty = "I'm object property";
// the following demonstrates initialization of
// the object property from class (static) property:
this.varFromStatic = MyClass.classProperty;
}
MyClass.classProperty = "I'm class (static) property";
var obj = new MyClass();
// now obj.varFromStatic contains "I'm class (static) property"