我有以下 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 实例的原型(prototype)中。打印 0 是合理的。
在jack.setAge(25);语句中,当执行代码this.age =age;时,似乎在this.age = Age;中添加了一个新属性> jack 实例。我很困惑为什么函数 jack.setAge(25); 不将值分配给 Person.prototype.age?
谢谢
杰弗里
最佳答案
发生的情况是:
- Intepreter 在
jack
对象中查找setAge
函数。 - 它不存在,所以它看起来在原型(prototype)链中更上一层。就在那里。
- Intepreter 调用
setAge
并将jack
绑定(bind)到此。因此,setAge
中的this.age
与jack
相关,而不是jack.prototype
。因此 jack.age = 25。
如果你想修改Person的age
属性,你可以调用:
Person.prototype.setAge(7);
(现在 this
将绑定(bind)到 Person.prototype
)。
关于javascript - 为什么不能通过this指针设置prototype的值类型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17972387/