1

私はWeb開発者向けのプロのJavaScriptを読んでいますが、彼らは次のことを示しています。

このコードは機能します:

var friend = new Person();

Person.prototype.sayHi = function(){
    alert("hi");
};

friend.sayHi();

しかし、このコードはしません:

function Person(){
}

var friend = new Person();

Person.prototype= {
   constructor: Person,
   name: "Nicholas",
   age: 29,
   job: "Software Engineer",
   sayName: function () {
       alert(this.name);
   }
};

friend.sayName();

2番目の例では、変数がインスタンス化された後にプロトタイプが定義されているfriendことがわかりますが、その場合、最初の例が機能するのはなぜですか?

4

1 に答える 1

4

最初のスニペットでは、インスタンスにすでに提供されている既存のプロトタイプに追加しています。Person2番目では、にすでに与えられているプロトタイプオブジェクトとは異なる、の新しいプロトタイプを作成していますfriend

プロトタイプに新しい関数を追加する場合は、その関数が呼び出される前であればいつでも追加できます。新しいインスタンスをインスタンス化する前に、コンストラクター関数のプロトタイプに新しいオブジェクトを割り当てる必要があります。

于 2013-03-10T22:33:55.447 に答える