继承(发展史)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37504436/article/details/87781275

2、借助构造函数

  1.  改变this指向

  2. 传参列表不一样(apply需传一个arguments)

 

3、共享原型

        //共享原型--1
        
        Father.prototype.lastName = "wang";
        function Father(){
            
        }
        function Son(){
            
        }
        Son.prototype = Father.prototype;  //两者关联起来
        
        var son = new Son();
        var father = new Father();
        console.log(son.lastName);
        console.log(father.lastName);
                
  

存在弊端,Son不能拥有自己独立的原型,

//共享原型--3(inherit)
        
        Father.prototype.lastName = "wang";
        function Father(){
            
        }
        function Son(){
            
        }
        function inherit(Target, Origin){
            Target.prototype = Origin.prototype;
        }
        
        inherit(Son, Father);
        Son.prototype.sex = "male";//不是自己独立拥有的
        
        var son = new Son();
        var father = new Father();//father.sex = "male" 

Son不能拥有自己独立的原型,所以调整如下 

  //共享原型--4
        
function inherit(Target, Origin){
    function F(){}
    F.prototype = Origin.prototype;
    Target.prototype = new F();


    //son.__proto__ ---> new F().__proto__ ---> Father.prototype(使son.constructor属于自己)
    Target.prototype.constructor = Target;
    Target.prototype.uber = Origin.prototype;//查看正真继承谁:超类
}
    Father.prototype.lastName = "wang";
    function Father(){}
    function Son(){}
    inherit(Son, Father);
        
    var son = new Son();
    var father = new Father();

4、最终模式 

猜你喜欢

转载自blog.csdn.net/qq_37504436/article/details/87781275