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;

  //       ... 

したがって、これら2つの主な違いは、2番目の例では、(プロトタイプのデクレレーションのために)コンストラクターから静的メンバーを参照できるのに対し、最初の例では参照できないということです。

4

1 に答える 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 に答える