0

我正在尝试在 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;

  //       ... 

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

4

1 回答 1

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
于 2013-01-19T23:52:08.633 回答