Person
のinstance
は、例えば、person1
はname
とheight
などのPerson.prototype
で定義されてarray
はなく、他のプロパティでプロパティjobs
を、変更することができる、なぜ私は混乱しています。これは、person2
がperson1
がproperties
を修正しようとした後にPerson.prototype
からプロパティを呼び出すときに発生します。私はどんな考えや考えにも感謝します。ありがとうございました。Javascript:インスタンスが配列を変更できますが、プロトタイプで定義されている他のプロパティは変更できないのはなぜですか?
function Person(){
}
Person.prototype = {
constructor : Person,
name: "Hello",
height: 6,
jobs: ['developer', 'student'],
getInfo: function(){
alert("My name is "+this.name+" and my height is: "+this.height+" feet");
}
}
var person1 = new Person();
person1.height = 5;
person1.name = "World";
person1.jobs.push('cook');
alert(person1.jobs); //developer, student, cook
alert(person1.height); //5
alert(person1.name); //World
var person2 = new Person();
alert(person2.height); //6
alert(person2.jobs); //developer, student, cook
alert(person2.name); //Hello
PersonのコンストラクタをPersonに設定するのはなぜですか? –
@Bálint:これはJavaScriptがプロトタイプオブジェクトの 'constructor'プロパティを定義しているからです(それほど難しくありません)。 –
@ T.J.Crowder 'Person.prototype = {...}'を書くと、コンストラクタはPerson関数であることが既に解読されています。 –