JavaScriptのJavaScriptでアクセスできるすべてのインスタンスでアクセスできるプロパティとメソッドは、私のような属性を再割り当てする必要があります。知識の一部。
基本的なタイプの定義は次のとおりです。
次のようにコードコードをコピーします。
function person(){}
person.prototype = {
コンストラクター:人、
名前:「人」、
年齢:100、
友達:[a "、" b "]、
getName:function(){
this.nameを返します。
}
};
2人の例を定義し、インスタンスの名前プロパティを変更します(属性はプロトタイプで定義されています)、テストコードは次のとおりです。
次のようにコードコードをコピーします。
var p1 = new person();
var p2 = new person();
document.write(p1.name+"<br/>");
document.write(p2.name+"<br/>");
p1.name = "p1";
document.write(p1.name+"<br/>");
document.write(p2.name+"<br/>");
document.write(p1.hasownproperty( "name")+"<br/>");
document.write(p2.hasownproperty( "name")+"<br/>");
document.write(object.keys(p1)+"<br/>");
document.write(object.keys(p2)+"<br/>");
document.write(object.get.getownpropertynames(person.prototype)+"<br/>");
document.write(person.prototype.name+"<br/>");
テスト後、p1.name = "p1"は名前の値を変更しませんが、インスタンスP1のNamepeに名前属性を追加します。後者のobject.keys(P1)は、P2のないP1インスタンスに追加の名前属性があることも確認できます。 JSのすべての伝送は、この値を参照タイプへのポインターにすることができますこの問題を説明するコード。
次のようにコードコードをコピーします。
var obj = new object();
obj.name = "obj";
関数changeobj(o){
o.name = "変更";
o = new object();
o.name = "newobj";
}
Changeobj(obj);
document.write(obj.name);
ChandedOBJメソッドでは、o = new Object()はパラメーターoの値を変更しませんが、元の参照関係を遮断するため、結果はnewobjではなく変更されましたが変更されました
最初の例では、プロトタイプのFriends属性を変更する次のテスト
次のようにコードコードをコピーします。
p1.friends.push( "c");
document.write(p1.friends+"<br/>");
document.write(p2.friends+"<br/>");
p1.friends = ["x"、 "y"、 "z"];
document.write(p1.friends+"<br/>");
document.write(p2.friends+"<br/>");
document.write(p1.hasownproperty( "friends")+"<br/>");
document.write(p2.hasownproperty( "friends")+"<br/>");
document.write(object.keys(p1)+"<br/>");
document.write(object.keys(p2)+"<br/>");
document.write(object.get.getownpropertynames(person.prototype)+"<br/>");
document.write(person.prototype.friends+"<br/>");
テスト結果は、基本的に最初のテストと同じです。現時点では、元の引用が切断され、インスタンスの新しい属性が作成され、プロトタイプの同じ名前の属性がカバーされます。
これらの2つのテスト結果に基づいて、プロトタイプの値型属性をインスタンスで直接変更できないことがわかります(もちろん、この値タイプはプロトタイプで定義されるべきではありません。