关于prototype的一个小问题

代如下

function Person(){}

Person.prototype.name = 'Mary';

var p1 = new Person();
var p2 = new Person();

p1.name = 'Jack';
p2.name = 'Tom';

console.log(p1.name);
console.log(p2.name);

控制台输出为

Jack
Tom

name属性为原型对象拥有,为什么p2重新复制以后,p1依然能访问到自己赋的值?

阅读 2.8k
4 个回答

p1.name = 'Jack';
p2.name = 'Tom';
这里的name 属性是p1 和 p2 两个实例上各自定义的的属性,不会相互影响
感觉可能是理解为这里的name 是原型对象上的属性了。

如果把 p1.name = 'Jack'; 这个注释了,
输出的 p1.name 就是原型对象上的name 属性了,也就是 “Mary”

原型对象拥有的,可以在实例对象中覆盖。JS 会先找实例对象中指定名称的属性(或方法)如果找不到,再从原型链去依次查找。

儿子没钱的时候就找老子要,儿子有钱了当然就不用了。

因为这是2个对象啊。。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题