zoukankan      html  css  js  c++  java
  • JavaScript面向对象编程(10)高速构建继承关系之对象拷贝

    前面的样例我们是通过构造器创建对象。而且希望该对象继承来自另外一个构造器的对象
    我们也能够直接面向一个对象来达成继承的目的。使用下属步骤:
    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;
    }



  • 相关阅读:
    CentOS安装KDE
    __builtin_expect — 分支预测优化
    Linux中CPU亲和性(affinity)
    字节序
    gethostbyname
    字符串搜索算法
    排序算法
    Linux下使用http协议下载文件
    POSIX Timer
    POSIX-Data Structure
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5057682.html
Copyright © 2011-2022 走看看