js三种继承

javascript的继承总是很烦人。。。这里记录一下三种继承的方式

  1. 类式继承

    顾名思义,就是和其他语言类继承差不多,代码如下,其实还是借助了原形链

    	function inherit(C,P){
    		var F = new function(){};
    		F.prototype = P.prototype;
    		C.prototype = new F();
    		C.prototype.constructor = C;
    	}
    	//示例
    	function  A(){
    	this.name = "111";
    	this.age = "234";
    }
    A.prototype.say = function(){
    	alert(this.name);
    }
    function inherit(C,P){
    	var F = function(){};
    	F.prototype = P.prototype;
    	C.prototype = new F();
    	C.prototype.constructor  = C;
    	}
    function B(){
    	this.name = "dddd";
    	this.abc = "ccc";
    }
    inherit(B,A);
    var b = new B();
    console.log(b);	

  2. 原型继承

    本模式不涉及类,这里的对象都是继承自其他对象,示例如下

    	function object(o){
    		function F(){};
    		F.prototype = o;
    		return new F();
    	}
    	var a = {
    		name:"123"
    	}
    	var b = object(a);
    	console.log(b.name);
    	//如你所想,该模式在ECMA5 中Object.create(o) 得到实现	

  3. 深度复制继承

    本模式其实就是复制父对象,示例如下

    	 function  deepClone(p,c){
    		var i,toStr = object.prototype.toString,astr = "[object Array]";
    		c = c||{};
    		for(var i in p){
    			if(p.hasOwnProperty(i)){
    				if(typeof p[i] ==="object"){
    					c[i] = (toStr.call(p[i])===astr)?[]:{};
    					deepClone(p[i],c[i])
    				}else{
    					c[i] = p[i]
    				}
    			}
    		}
    		return c;
    	 }
    	 var a = {
    		name :"123",
    		list:[1,2,3]
    	 };
    	 var b = deepClone(a);
    	 b.list[1]="aaa";
    	console.log(b);	
    	console.log(a);	

本文标题:js三种继承
本文链接:https://56way.com/p/68.html
作者授权:除特别说明外,本文由 无路 原创编译并授权 小无路 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。