javascript - 为什么不能通过this指针设置prototype的值类型属性

标签 javascript

我有以下 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

谢谢

杰弗里

最佳答案

发生的情况是:

  1. Intepreter 在 jack 对象中查找 setAge 函数。
  2. 它不存在,所以它看起来在原型(prototype)链中更上一层。就在那里。
  3. Intepreter 调用 setAge 并将 jack 绑定(bind)到此。因此,setAge 中的 this.agejack 相关,而不是 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/

相关文章:

javascript - SystemJS 和 Webpack 之间有什么区别?

javascript - 如何远程模拟下拉选择

javascript - 如何使用 javaScript/JQuery/Hibernate/Spring 在 jsGrid 中显示来自数据库的图像?

javascript - 为 window.object 实现私有(private)函数

javascript - 使用 jquery 避免重复

javascript - 创建一个 session 以不再在投票中投票

javascript - 将 Javascript/Html/PHP 显示为文本

javascript - 查找子元素为空字符串的 li

javascript - 上一个和下一个按钮在网页中不起作用

javascript - 获取 Canvas 绘图的确切坐标?