javascript中的静态成员

javascript中的静态成员,javascript,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.c

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

  //       ... 

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

在这两个例子中,您都可以从构造函数中找到它。区别在于你是否能通过你的一个物体到达它

选项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
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
选项B:

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
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

@yoavbarnea-我认为选项A更好。@yoavbarnea选项B不是一个真正的静态成员,而是一个实例成员。碰巧,使用JS,您可以通过在原型上访问实例成员来调用它们