簡體   English   中英

為什么不能通過this指針設置原型的值類型屬性

[英]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嗎?

謝謝,

傑弗里

發生的是:

  1. setAge器在jack對象中尋找setAge函數。
  2. 它不存在,因此在原型鏈中看起來很上一層樓。 在那。
  3. 解釋器調用與此綁定的jack setAge 因此this.age中的setAgejack ,而不與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM