• js 继承概述


           上文讲述过js实现面向对象,一定是能够实现继承的效果的。尽管说非常多的js框架都帮助我们实现了继承的功能。或者说在日常的工作和学习中我们压根就用不到js的继承,可是我们还是须要了解一下js中继承。以方便我们阅读框架中的继承是怎样实现的。在以下的文章中我会给大家模拟一下js中继承的实现。

     先来看一下以下创建对象的一种方式:

    /*
     * 对象工厂
     */
    function objectFactory(jsonObj){
    	function objectEntity(){
    	
    	}
    	if(typeof jsonObj == "object"){
    		for(var index in jsonObj){
    			objectEntity.prototype[index] = jsonObj[index]; 
    		}	
    	}
    	return objectEntity;
    }
    
    var Person = objectFactory({
    	pname:'andy',
    	sex:'man'
    });
    
    var person = new Person();
    console.info(person+"--"+Person);// [object Object] -- function objectEntity(){}
    console.info(person.pname);
    console.info(person.sex);
     
    objectFactory接受的是一个json对象jsonObj作为參数,在这个函数内部创建了一个函数objectEntity。然后就推断输入的jsonObj
    
    是否是对象类型。假设是那么就遍历这个json对象,然后把遍历出来的每一个值都附加objectEntity的原型上面,请注意,以下返回的
    就是objectEntity(能够參考上节中的js闭包概念),也就是说Person指向的就是objectEntity,那么Person的原型上面自然的就有了
    pname,sex等属性。




    假设上述可以理解的话,我们就行进行下一步的继承的实现(类似于非常多框架中的继承底层实现)

    /*
     * 继承
     */
    function inherit(obj,prop){
    	function f(){
    		
    	}
    	if(typeof obj=="object"){
    		for(var index in obj){
    			f.prototype[index] = obj[index]; 
    		}
    	}else{
    		f.prototype = obj.prototype;
    		for(var index in prop){
    			f.prototype[index] = prop[index]; 
    		}
    	}
    	
    	return f;
    }
    
    var Animal = inherit({
    	type:'animal',
    	name:'animal',
    	jump:'jump'
    });
    
    var Dog = inherit(Animal,{
    	name:'i am a dog',
    	jump:'dog jumpping'
    });
    
    var dog = new Dog;
    console.info(dog.type);
    console.info(dog.name);

    在这里就不再对inherit这个函数进行具体的解释,读者能够自行分析,在这里Dog 继承了Animal。那么Dog创建出来的对象dog自然的就有了Animal中的各个属性。



    
    

    
    

    
       
    
  • 相关阅读:
    算法-在字符串中删除特定的字符或字符串
    Linux 下的7种文件类型
    TCP/IP协议、三次握手、四次挥手
    8、VUE自定义组件
    7、VUE事件
    6、VUE指令
    Redis高级功能-1、高并发基本概述
    5、插值
    4、VUE生命周期
    3、Vue实例的属性
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6685916.html
Copyright © 2020-2023  润新知