为了账号安全,请及时绑定邮箱和手机立即绑定

关于prototype问题。

关于prototype问题。

ABOUTYOU 2018-12-20 18:19:49
    function Parent() {                this.a = 1;                 this.b = [1, 2, this.a];                 this.c = { demo: 5 };                 this.show = function () {                     console.log(this.a , this.b , this.c.demo );                }             }             function Child() {                this.a = 2;                this.change = function () {                this.b.push(this.a);                this.a = this.b.length;                this.c.demo = this.a++;                 }            }            Child.prototype = new Parent();             var parent = new Parent();            var child1 = new Child();            var child2 = new Child();                      parent.show();            child1.show();            child2.show();            child1.change();为什么运行change()的时候child1.show(),child2.show(),的数组也会改变呢(push的this.a)?谢谢!
查看完整描述

1 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

Child.prototype = new Parent();

这句话,使得new Child得到的对象其原型都指向于同一个new出来的Parent实例对象(我们叫他A)。

而b没有在Child中做声明,那么在Child里用b,其实就是用A的b属性,所以,你new出来的Child实例,只要一调用change方法,方法的逻辑里对b进行了数组添加操作,那就是往A的b数组里添加元素。

// 这里啰嗦一下,关于对象里访问this.xx的时候,会先查看对象当前有没有xx这个成员,没有就会往其原型对象上查找xx,这也就是为什么child实例访问this.b访问的是A的b


查看完整回答
反对 回复 2019-01-10
  • 1 回答
  • 0 关注
  • 506 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信