zoukankan      html  css  js  c++  java
  • 对象拷贝与继承

    对象继承

    构造函数的继承方法

    function A(){
        this.x='x';
    }
    A.protopype={
        constructor:A,
        y:'y'
    }
    function B(){
        this.z='z';
    }
    B.prototype={
        constructor:B,
        (
        如果不指回B,new B的原型将指向object,
        B.prototype={}---B的原型变成一个object对象的实例
        原型链变成 B-object(B.prototype,也就是object的ige实例)-object.prototype;
        )
        P:'p'
    }
    
    1.继承构造函数
    function B(){
        A.apply(this,arguments);
        (将构造函数A传入this中,参数为B的参数)
    }
    原型链:B-B.prototype-object
    得到:B,BP,A;
    缺点:new B()不会继承A.prototype;
    
    2.继承原型
    B.prototype=A.prototype;
    B.prototype.constructor=B;
    原型链:B-A.prototype-object
    得到:B,AP
    缺点:只是继承了A.prototype;A.prototype.constructor=B;
    
    3.继承实例
    B.prototype=new A();
    B.prototype.constructor=B;
    原型链:B-object实例(A的实例)-A.prototype-Object
    得到:B,A,AP
    缺点:将原本的B.prototype删除了;
    
    4.通过中介对象继承原型
    fuction extend(child,parent){
        var f=function(){};
        f.prototype=parent.prototype;
        child.prototype=new f();
        child.prototype.constructor=child;
        child.uber=parent.prototype;
    }
    原型链:B-A.prototype-object
    得到:B,AP
    (对比直接继承原型,A.prototype的constructor不用指向B);
    

    对象的拷贝

    1.object()方法--继承
    function obj(o){
    	function f(){};
    	f.prototype=o;
    	return new f();
    }
    然后 var b=obj(a);
    b.name="name";
    缺点:b自身的属性需要一个个定义;
    2.浅拷贝--半继承
    function extend(x,y){
    	for(var i in x){
    		y[i]=x[i];
    	}
    }
    缺点:如果父对象的属性是对象之类引用类型,获得的是地址,如果是字符串之类,直接得到的值,有的是继承的,有的是复制的.
    
    3.深拷贝--复制
    通过递归
    function extend(x,y){
        var y=y||{};
    	for(var i in x){
    		if(typeof x[i] === "object"){
    			y[i] = (x[i] instanceof Array) ? [] : {};
    			extend(x[i],y[i])
    		}else {
          y[i] = x[i];
         }
    	};
    	return y;
    }
    
    
  • 相关阅读:
    OPC客户端的进程安全初始化
    [精华] Oracle安装(linux)总结一下[转]
    Linux防火墙iptables的设置与启动[转]
    Linux Server 5.5安装SVN+Apache服务[转]
    Red hat Linux Enterprise 5.4 Edtion 学习笔记[二]
    RedHat Linux 5企业版开启VNCSERVER远程桌面功能[转]
    Linux服务配置:Vsftp的基本配置[转]
    Linux查看和剔除当前登录用户
    Ubuntu10.04的中文问题汇集与解决[转]
    Linux下扩展swap分区的方法
  • 原文地址:https://www.cnblogs.com/LiangHuang/p/6413896.html
Copyright © 2011-2022 走看看