经典面试题:js继承方式下
上一篇讲解了构造函数的继承方式,今天来讲非构造函数的继承模式。 一、object()方法 json格式的发明人Douglas Crockford,提出了一个object()函数,可以做到这一点。 function object(o) { function F() {} F.prototype = o; return new F(); } 二、浅拷贝 除了使用"prototype链"以外,还有另一种思路:把父对象的属性,全部拷贝给子对象,也能实现继承。 下面这个函数,就是在做拷贝: function extendCopy(p) { var c = {}; for(var i in p) { c[i] = p[i]; } c.uber = p; return c; } 三、深拷贝 所谓"深拷贝",就是能够实现真正意义上的数组和对象的拷贝。它的实现并不难,只要递归调用"浅拷贝"就行了。 function deepCopy(p, c) { var c = c || {}; for(var i in p) { if(typeof p[i] === 'object') { c[i] = (p[i].constructor === Array) ? [] : {};