一道题测试你的js水平

臭嗖糖粑粑 2017-08-10 09:40:13
        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();

child1.a = 11;
child2.a = 12;
parent.show();
child1.show();
child2.show();
child1.change();
child2.change();
parent.show();
child1.show();
child2.show();
...全文
617 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
似梦飞花 2017-08-11
  • 打赏
  • 举报
回复
一个操作原型上的数组 所以公用 一个是自己对象上的a(调用时调用的是自己对象上的a 不是原型上的a 自己对象的a掩盖住了原型上的a) 所以不共用 数组 b是在new的时候就已经确认值了的 所以修改a没用 因为a是基本类型 不是引用类型
臭嗖糖粑粑 2017-08-11
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
child1.a = 11; child2.a = 12; parent.show();//1 [1,2,1] 5 child1.show();//11 [1,2,1] 5 child2.show();//12 [1,2,1] 5 child1.change(); child2.change(); parent.show();//1 [1,2,1] 5 child1.show();//5 [1,2,1,11,12] 5 child2.show();//6 [1,2,1,11,12] 5 Child的prototype是同一个Parent对象,所以引用类型属性的更改都会反映到所有Child实例,非引用类型属性只会修改对应实例值 还有一个就是=和++的位置,++在后面先赋值再++,前面反过来
child1.a = 11; child2.a = 12; 这两个就看不懂了
  • 打赏
  • 举报
回复
引用 2 楼 u010139766 的回复:
[quote=引用 1 楼 showbo 的回复:] child1.a = 11; child2.a = 12; parent.show();//1 [1,2,1] 5 child1.show();//11 [1,2,1] 5 child2.show();//12 [1,2,1] 5 child1.change(); child2.change(); parent.show();//1 [1,2,1] 5 child1.show();//5 [1,2,1,11,12] 5 child2.show();//6 [1,2,1,11,12] 5 Child的prototype是同一个Parent对象,所以引用类型属性的更改都会反映到所有Child实例,非引用类型属性只会修改对应实例值 还有一个就是=和++的位置,++在后面先赋值再++,前面反过来
child1.a = 11; child2.a = 12; 这两个就看不懂了[/quote] a是非引用类型,所以只会修改自己的实例值,b是数组,引用类型,所以修改后会反应到所有的实例中,其实就是 Child的prototype是同一个Parent对象,所以引用类型属性的更改都会反映到所有Child实例,非引用类型属性只会修改对应实例值 这句,你好好理解下

推荐学习资料
jqGrid行编辑配置
easyui datagrid fitColumns:true失效解决办法
  • 打赏
  • 举报
回复
child1.a = 11; child2.a = 12; parent.show();//1 [1,2,1] 5 child1.show();//11 [1,2,1] 5 child2.show();//12 [1,2,1] 5 child1.change(); child2.change(); parent.show();//1 [1,2,1] 5 child1.show();//5 [1,2,1,11,12] 5 child2.show();//6 [1,2,1,11,12] 5 Child的prototype是同一个Parent对象,所以引用类型属性的更改都会反映到所有Child实例,非引用类型属性只会修改对应实例值 还有一个就是=和++的位置,++在后面先赋值再++,前面反过来

87,989

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧