我有以下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的声明中,在 jack 实例的原型中找到年龄属性。打印 0 。
是合理的在声明 jack.setAge(25); 时,执行代码 this.age = age; 时,似乎新属性被添加到 jack 实例。我很困惑为什么函数 jack.setAge(25); 将值赋给 Person.prototype.age ?
谢谢,
杰弗里
答案 0 :(得分:4)
会发生什么:
setAge
对象中查找jack
函数。setAge
绑定的jack
。因此this.age
中的setAge
与jack
相关,而不是jack.prototype
。因此jack.age = 25。如果要修改Person的age
属性,可以调用:
Person.prototype.setAge(7);
(现在this
将绑定到Person.prototype
)。
答案 1 :(得分:0)
我很困惑为什么不是函数jack.setAge(25);分配值 到Person.prototype.age?
将值赋给Person.prototype.age
是没有意义的,因为要继承此属性。如果此语句将值赋给Person.prototype.age
,则从此继承的所有对象都将受到影响。这就是为什么浏览器在这种情况下实现this
来引用实例对象(jack),而不是Person.prototype
这是
执行代码this.age = age;时,似乎是一个新属性 添加到插孔实例。