JS的prototype的共享机制分析
2016-04-21 15:54
471 查看
function Super(){ } Super.prototype.aaa=[1,2,3]; Super.prototype.bbb=1; function Sub(){ Super.call(this); } Sub.prototype=new Super(); Sub.prototype.constructor=Sub; var a=new Sub(); var b=new Sub(); a.bbb=5; //当这句话执行的时候,并不是操作prototype上的bbb,而是给a对象添加了一个bbb属性 alert(a.bbb); //这里弹出的是刚才添加的bbb属性,因为已经找到刚才添加的了,所以不会在prototype上找了 delete a.bbb; //删除了刚才添加的bbb属性 alert(a.bbb); //这下就能弹出prototype上的bbb了 a.aaa[0]=5; //而这句话就不一样了,并不是创建aaa属性,而是修改prototype上的aaa[0]。通过语法可以看出 alert(b.aaa[0]); //那么b对象也会受影响,会弹出5 a.aaa=[]; //而这里也是创建了一个aaa属性,并不会修改prototype的aaa alert(b.aaa[1]); //不会受到上一句的影响,会弹出prototype上的aaa[0]即数字2 a.aaa[0]=9; //这里也不一样了,因为上面在a对象上直接创建了个aaa数组,所以是修改的上面刚创建的aaa,而不是prototype上的 alert(a.aaa[0]); //这里会弹出9 alert(b.aaa[0]); //这里会弹出5
相关文章推荐
- JavaScript判断IE各版本最完美解决方案
- js中数组申请的区别
- 输出js对象的所有属性值
- JS原型链原理(链表)
- JS中的自定义属性
- JavaScript可否多线程? 深入理解JavaScript定时机制
- json解析入门(jsoncpp库)
- Eclipse去除js(JavaScript)验证错误
- JS图片预加载
- 深入理解javascript的闭包
- javascript数组
- 访问WEB-INF目录中的JSP文件
- JavaScript全局变量与局部变量重名的情况
- js ie中实现拖拽
- JavaScript入门
- js回调函数
- js多个输入框运算计算结果输出到另一个输入框
- js根据不一样的移动设备调整到相应的页面
- JS中的call()方法的理解
- javascript继承实现