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;
    }



  • 相关阅读:
    CodeForces 734F Anton and School
    CodeForces 733F Drivers Dissatisfaction
    CodeForces 733C Epidemic in Monstropolis
    ZOJ 3498 Javabeans
    ZOJ 3497 Mistwald
    ZOJ 3495 Lego Bricks
    CodeForces 732F Tourist Reform
    CodeForces 732E Sockets
    CodeForces 731E Funny Game
    CodeForces 731D 80-th Level Archeology
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5057682.html
Copyright © 2011-2022 走看看