javascript中的静态成员

时间:2013-01-19 23:49:01

标签: javascript

我想在javascript中模拟静态成员。

考虑这段代码:

 // option A for static members:

     // constructor...
  function Person(name) {

      this.firstName=name;        
  }

  Person.count=0;              //  like a static member...
  var p=new Person("Dan");
  Person.count++;

  alert(Person.count);   // 1;

现在这一个:

  //  option B for static members:
          // constructor..
  function Person(name) {

      this.firstName=name;
      Person.prototype.count++;     

  }

  Person.prototype.count=0;        //  like a static member...
  var p=new Person("Dan");
  alert(Person.prototype.count);   // 1;

  //       ... 

所以,说这两者之间的主要区别是,在第二个例子中,您可以从构造函数中引用静态成员(由于原型 decleration),而在第一个例子中,你不能?

1 个答案:

答案 0 :(得分:1)

在这两个示例中,您都可以从构造函数中获取它。不同之处在于您是否可以通过其中一个对象来实现它。

选项A:

function Person (name) {
    this.firstName = name;
    Person.count++;
}

Person.count = 0;
var p = new Person("Dan")

console.log(Person.count) // 1
console.log(p.count) // undefined

选项B:

function Person (name) {
    this.firstName=name;
    Person.prototype.count++;     
}

Person.prototype.count = 0;
var p = new Person("Dan");

console.log(Person.prototype.count) // 1
console.log(p.count) // 1