各JavaScript関数にはプロトタイプ属性があります(JavaScriptオブジェクトにはこの属性がありません)。この属性は、プロトタイプオブジェクトであるオブジェクトを指します。 JavaScriptを使用すると、このプロトタイプオブジェクトを変更できます。
変更する方法は2つあります。
方法1:元のプロトタイプオブジェクトにプロパティまたはメソッドを追加する
function persons.person.prototype.add = function(){alert(this.name);}; person.prototype.name = "aty"; var p1 = new person(); p1.add(); // aty方法2:プロトタイプオブジェクトを書き直す(上書き)
function person()person.pers.prototype = {add:function(){alert(this.name);}、name: "aty"} var p2 = new person(); p2.add(); // aty上記の2つの方法でプロトタイプを変更できることがわかります。違いは何ですか?推奨される方法はどの方法ですか?
function person(){} function animal(){} var person = new person(); var animal = new Animal(); // prototype person.prototype.say = function(){alert( "person");} // prototype animal.prototype = {sake(){arert( "person");}; personAnimal.say(); // caught typeerror:未定義は関数ではありません最初にオブジェクトを作成してからプロトタイプを変更する場合、メソッド1を使用する場合、作成したオブジェクトは変更されたプロトタイプに正しくアクセスできます。メソッド2を使用する場合、作成したオブジェクトは変更されたプロトタイプにアクセスできません。この観点から、明らかに方法1は方法2よりも優れています。なぜこれが起こっているのですか?
function person(){} function animal(){} var person = new person(); var animal = new Animal(); alert(person .__ proto__ === person.prototype); // truealert(animal .__ proto__ === Animal.prototype); // true // true //プロトタイプのmodifififififie and optotytotytotype.say.say.say.say.say.say.say.say() Animal.prototype = {say:function(){alert( "person");}} alert(person .__ proto__ === person.prototype); // truealert(animal .__ proto__ === animal.prototype); // fals明らかに、これはJavaの「参照の変更」および「参照によって指摘されたオブジェクトを変更する」と非常に似ており、効果は同じです。
JavaScriptプロトタイプの変更と書き換え(上書き)の違いの上記の詳細な説明は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。