javascript中同一类(对象)中的静态和非静态数据

时间:2011-06-02 16:16:06

标签: javascript object

我知道有两种方法可以在JavaScript中创建类

var MyObj = function(val)
{
  this.vari = val;
}

其中val将是非静态成员。

然而,

var MyObj = new Object();
MyObj.vari = "";

这是一个单个对象,因此这里的成员将像静态成员一样。我的问题是,我们如何在同一个类中同时拥有静态内容和非静态内容?

3 个答案:

答案 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"