JavaScript物件導向編程(10)快速構建繼承關係之對象拷貝,javascript物件導向
前面的例子我們是通過構造器建立對象,並且希望該對象繼承來自另外一個構造器的對象我們也可以直接面向一個對象來達成繼承的目的,使用下屬步驟:1、拷貝一個對象2、給新對象添加屬性
/** * 通過拷貝繼承對象的屬性和行為 * @param {Object} p 父物件 */function extendCopy(p) {var c = {};for (var i in p) {c[i] = p[i];}c.uber = p;return c;}
使用起來也比較簡單:
var shape = {name: 'shape',toString: function() {return this.name;}}var twoDee = extendCopy(shape);twoDee.name = '2D shape';twoDee.toString = function(){return this.uber.toString() + ', ' + this.name;};var triangle = extendCopy(twoDee);triangle.name = 'Triangle';triangle.getArea = function(){return this.side * this.height / 2;}//使用繼承而來的toString方法alert(triangle.toString());
至於要深度拷貝,可使用下面的函數
/** * 深度拷貝 * @param {Object} p 父物件 * @param {Object} c 子物件 */function deepCopy(p, c) {var c = c || {};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;}