同一类(对象)据我所知,有在JavaScript静态和非静态数据以JavaScript
var MyObj = function(val)
{
this.vari = val;
}
创建类的两种方法其中val将是一个非静态成员。
然而,
var MyObj = new Object();
MyObj.vari = "";
这是一个单一的对象,因此在这里它的成员将像静态成员。我的问题是,我们如何在同一个类中同时使用静态和非静态内容?
同一类(对象)据我所知,有在JavaScript静态和非静态数据以JavaScript
var MyObj = function(val)
{
this.vari = val;
}
创建类的两种方法其中val将是一个非静态成员。
然而,
var MyObj = new Object();
MyObj.vari = "";
这是一个单一的对象,因此在这里它的成员将像静态成员。我的问题是,我们如何在同一个类中同时使用静态和非静态内容?
有在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
使用您的第一个例子:
var MyObj = function(val) {
this.vari = val;
};
MyObj.var2=value;
将创建一个新的 “静态” 属性可调用为:
var o = MyObj.var2;
第一个使用匿名函数初始化MyObj变量 - 它不创建类。 MyObj稍后可以用作初始化一个对象字段 - vari的对象构造函数。在面向对象的意义上没有什么“统计”。
第二个创建对象类型的对象并初始化其属性。再一次,没有什么是静态的。
在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"
谢谢。顺便说一下,犀牛? – mihsathe 2011-06-02 16:26:46
类别。我真的只是为了举例而输入它,但我模仿了Rhino repl。 – Jeremy 2011-06-02 16:27:31