ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#面向对象之拷贝继承 ``` var a = { name: '小明' }; var b = a; b.name = '小强'; alert(a.name); // 小强 ``` ``` var a = { name: '小明' }; var b = {}; for(var attr in a){ b[attr] = a[attr]; } 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]; } } ``` 方法的继承:for in 拷贝继承(jquery也是采用拷贝继承 extend) ``` function CreatePerson(name, sex){ // 父类 this.name = name; this.sex = sex; } CreatePerson.prototype.showName = function(){ alert(this.name); }; var p1 = new CreatePerson('Mary', '女'); p1.showName(); // 小明 function CreateStar(name, sex, job){ // 子类 CreatePerson.call(this, name, sex); this.job = job; } // CreateStar.prototype = CreatePerson.prototype; extend(CreateStar.prototype, CreatePerson.prototype); CreateStar.prototype.showSex = function(){ alert(this.sex); }; var p2 = new CreateStar('黄晓明', '男', '演员'); p2.showName(); // 黄晓明 p1.showSex(); // 控制台报错:Uncaught TypeError: p1.showSex is not a function,这样说明就解决了面向对象继承引用的问题 p2.showSex(); // 未能弹出 function extend(obj1, obj2) { for (var attr in obj2) { obj1[attr] = obj2[attr]; } } ``` 上面是利用了函数的一个特性:只能被重新赋值,不能被修改。比如数组,既可以被重新赋值又可以被修改,如下: ``` var a = [1,2,3]; var b = a; b.push(4); // 给b数组添加一个元素,说明b数组被修改了 alert(a); // 1,2,3,4 说明a数组也被修改了 ``` ``` var a = [1,2,3]; var b = a; b = [1,2,3,4]; // 对b数组重新赋值 alert(a); // 1,2,3 ```