博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS面向对象组件(五) -- 复制对象(拷贝继承)
阅读量:5895 次
发布时间:2019-06-19

本文共 813 字,大约阅读时间需要 2 分钟。

研究到这儿,竟然出现了一个面试题目

var a = {    name : '小明'};var b = a;b.name = '小强';alert( a.name );

结果必然是“小强”,原因是对象的引用,两个用的是一个地址,所以只要这个地址里的东西变了,那个两个对象弹出来的自然也要变。

 

故而这儿存在的是上篇同样的问题。

var a = {    name : '小明'};var b = {};extend( b , a );b.name = '小强';alert( a.name );function extend(obj1,obj2){    for(var attr in obj2){        obj1[attr] = obj2[attr];    }}

 

因此上篇的解决方案就是将 extend的方法加上,并且将

createStar.prototype = createPerson.prototype;   改成 extend(createStar.prototype,createPerson.prototype); 还有一个面试题目:
var a = [1,2,3];var b = a;b.push(4);alert(a);      // 1,2,3,4var a = [1,2,3];var b = a;b = [1,2,3,4];alert(a);     // 1,2,3

 

上面这个弹出结果,考察的是对象引用时的问题,对象引用改变了。

下面的弹出结果是,当b重新赋值时,对象应用问题就已经解开了,因为重新赋值时,b就又开了个新的地址,所以a还是1,2,3

 

所以总结一下,就是如下:
属性的继承 方法的继承
调用父类的构造函数call for in  拷贝继承(jquery中就是如此)
 

转载于:https://www.cnblogs.com/wanliyuan/p/5245170.html

你可能感兴趣的文章
让简历一发即中三大绝招
查看>>
Vim和操作系统剪贴板交互
查看>>
使用ExposedObject对Asp.net MVC中匿名类型的JsonResult做单元测试
查看>>
ajax省市县联动
查看>>
Cox 教学视频5
查看>>
android中的ellipsize设置(省略号的问题)
查看>>
实用帮助中心切换效果以及Css判断
查看>>
[C#学习] BindingNavigator控件
查看>>
算法:翻转单词顺序列
查看>>
Object.assign和序列/反序列
查看>>
Git远程操作详解【转】
查看>>
Git 创建仓库【转】
查看>>
2级DataList嵌套
查看>>
tomcat:javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
在linux通过kubeadm搭建kubernetes群集
查看>>
char varchar
查看>>
读博士的五个阶段
查看>>
[bzoj1787][Ahoi2008]Meet 紧急集合
查看>>
iOS开发——面试篇&面试总结(六)内存问题
查看>>
《Spring1之第六次站立会议》
查看>>