0

なぜこれが機能するのか....

function Person(name) {
   this.name = name;
  }


Person.prototype.speak =  function() {
   alert(this.name);
}


var person = new Person("fred");

person.speak();

しかし、これではありません..

function Person(name) {
   this.name = name;
        speak =  function() {
   alert(this.name);
}


var person = new Person("fred");

person.speak();

継承がどのように機能するか、またはJavaScriptの「プロトタイプチェーン」がわかりません。

ありがとう。

4

2 に答える 2

4
function Person(name) {
   this.name = name;
        speak =  function() {
   alert(this.name);
}

する必要があります

function Person(name) {
   this.name = name;
   this.speak = function () {
      alert(this.name);
   };
}
于 2012-06-18T16:47:57.790 に答える
0

実際、あなたが理解していないのは変数のスコープです。

function Person(name) {
  this.name = name;

  speak = function() {
    alert(this.name);
  }
}

varここの前を省略すると、 のスコープ内の変数ではなく、speak = ...という名前のグローバル変数が作成されます。ブラウザでは、グローバル変数はグローバル オブジェクト に関連付けられているため、コードは次のようになります。speakPersonwindow

function Person( name ) {
  this.name = name;

  window.speak = function() { alert( this.name ); }

}

Douglas Crockford は、プロトタイプの継承における変数のスコープに関するいくつかの関連資料を書いています。

于 2012-06-18T16:50:38.970 に答える