JS面向对象学习笔记(三)
2015-05-11 18:15
766 查看
非构造函数的继承
1.什么是“非 构造函数继承”
例如,有两个对象var Chinese = { nation: '中国'; } var Doctor = { career: '医生'; }
如何才能让doctor去继承chinese?
注意:这两个对象都是普通对象,不是构造函数。
object()方法
function object(o) { function F() {} F.prototype = o; return new F(); }
这个函数把子对象的prototype属性,指向父对象,从而使子与父连在一起。
var Doctor = object(Chinese); Doctor.career = '医生'; alert(Doctor.nation); // 中国
浅拷贝
除了使用prototype链以外,把父对象的属性,全部拷贝给子对象,也能实现继承。function extendCopy(p){ var c = {}; for(var i in p) { c[i] = p[i]; } c.uber = p; return c; }
缺点:如果父对象的属性等于数组或另一个对象,那门实际上,子对象获得的只是一个内存地址,因此存在父对象被篡改的可能。
var Doctor = extendCopy(Chinese); Doctor.career = '医生'; alert(Doctor.nation); // 中国 Chinese.birthPlaces = ['北京','上海','香港']; var Doctor = extendCopy(Chinese); Doctor.birthPlaces.push('厦门'); alert(Doctor.birthPlaces); //北京, 上海, 香港, 厦门 alert(Chinese.birthPlaces); //北京, 上海, 香港, 厦门
深拷贝
function deepCopy(p,c) { var c = c || {}; 4000 for(var i in p) { if(typeof p[i] === 'object') { c[i] = (p[i].constructor === Array) ? [] : {}; deepCopy(p[i],c[i]); } else { c[i] = p[i]; } } return c; }
var Doctor = deepCopy(Chinese); Chinese.birthPlaces = ['北京','上海','香港']; Doctor.birthPlaces.push('厦门'); alert(Doctor.birthPlaces); //北京, 上海, 香港, 厦门 alert(Chinese.birthPlaces); //北京, 上海, 香港
参考blog:
面向对象
相关文章推荐
- 面向对象的程序设计1 理解对象—— JS学习笔记2015-7-4(第75天)
- js面向对象学习笔记之六(变量)
- js面向对象学习笔记之二(debug调试方法)
- JS面向对象学习笔记(二)
- js面向对象学习笔记之八(cookie使用 与 url的get参数获取)
- js面向对象学习笔记之四(Date 对象)
- js面向对象学习笔记之五(定时器)
- JS 学习笔记--12---面向对象
- js面向对象学习笔记之一(类与对象)
- js面向对象学习笔记
- JS面向对象学习笔记(一)
- js面向对象学习笔记之七(函数 与 基础控制结构)
- js面向对象学习笔记之九(BOM 与 DOM 中常用属性分析)
- js学习笔记(1)-面向对象开发
- js面向对象学习笔记之三(Array 对象)
- 【学习笔记】JS基于原型的面向对象
- Javscript 面向对象学习笔记(1)
- 快速学习js 笔记四 screen 对象
- 【黑马程序员】 学习笔记 - Java面向对象
- C++primer学习笔记----面向对象程序设计(2)