[英]Why can't set the value type property of prototype via the this pointer
我有以下Javascipt代碼。
var Person = function(){};
Person.prototype.age = 0;
Person.prototype.setAge = function(age) {
this.age = age;
};
var jack = new Person();
console.log(jack.age); // #1
jack.setAge(25); // Why not this function assign the value to Person.prototype.age.
console.log(jack.age); // #2
console.log(jack);
運行代碼后,我得到的輸出如下。
0
25
Person {age: 25, age: 0, setAge: function}
age: 25
__proto__: Object
age: 0
constructor: function (){}
setAge: function (age) {
__proto__: Object
在標記為#1的語句中, age屬性在jack實例的原型中找到。 打印0是合理的。
在語句jack.setAge(25); ,執行代碼時this.age = age; ,似乎已將新屬性添加到jack實例。 我很困惑為什么不使用功能jack.setAge(25); 將值分配給Person.prototype.age嗎?
謝謝,
傑弗里
發生的是:
setAge
器在jack
對象中尋找setAge
函數。 jack
setAge
。 因此this.age
中的setAge
與jack
,而不與jack.prototype
。 因此jack.age = 25。 如果要修改人員的age
屬性,可以調用:
Person.prototype.setAge(7);
(現在this
將綁定到Person.prototype
)。
我很困惑為什么不使用功能jack.setAge(25); 將值分配給Person.prototype.age?
將值分配給Person.prototype.age
沒有意義,因為要繼承此屬性。 如果此語句將值分配給Person.prototype.age
,則從此繼承的所有對象都將受到影響。 這就是為什么瀏覽器在這種情況下實現this
以引用一個實例對象(jack)而不是Person.prototype
的原因,這就是
當執行代碼this.age = age;時,似乎向jack實例添加了一個新屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.