美文网首页
JavaScript中继承的实现方式---笔记

JavaScript中继承的实现方式---笔记

作者: 蘑菇均 | 来源:发表于2019-04-07 21:20 被阅读0次

继承的几种实现方式:原型链、借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合式继承;
继承的实现,一般有接口继承和实现继承。JavaScript只支持实现继承,其主要依靠原型链来实现。

一、原型链

其主要思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。
案例:

function SuperType(){
    this.property = true;
    this.colors = ["red","blue","green"]
}
SuperType.prototype.getSuperValue = function(){
    return this.property;
};
function SubType(){
    this.subproperty = false;
}
//继承了SuperType
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function(){
    return this.subproperty;
};

var instance = new SubType();
console.log(instance.getSuperValue());


console.log( instance instanceof Object);//true
console.log(instance instanceof SuperType);//true
console.log(instance instanceof SubType);//true

//遇到的问题:一、引用类型值的原型属性会被所有实例共享;
//二,在创建子类型实例时,不能向超类型的构造函数中传递参数;
instance1.colors.push("black");
var instance2 = new SubType();
console.log(instance2.colors);
二、借用构造函数

为了解决上面的问题,出现了借用构造函数的方式,通过使用apply和call方法在将来新创建的对象上执行构造函数;

function SuperType(name){
    this.colors = ["red","blue","green"];
        this.name = name;
}

function SubType(){
    //继承了SuperType方法,同时还传递了参数
    SuperType.call(this,"Jack");

    //实例属性
    this.age = 29;
}

var instance1 = new SubType();
instance1.colors.push("black");
console.log(instance1.colors);//"red","blue","green","black"

var instance2 = new SubType();
console.log(instance1.colors);//"red","blue","green"

这种方式解决了传递参数的问题,同时让每个实例用于自己的私有引用类型;但同时造成另一个问题,就是无法实现函数复用,即超类型的原型中定义的方法,对子类型而言都不可继承。

三、组合继承

指将原型链和借用构造函数技术组合在一块使用。使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。既通过在原型上定义方法实现函数复用,又保证每个实例都有它自己的属性。

function SuperType(name){
   this.name = name;
   this.colors = ["red","blue","green"];
}
SuperType.prototype.sayName = function(){
   console.log(this.name);
};
function SubType(name,age){
   //继承实例属性
   SuperType.call(this.name);
   this.age = age;
}
//继承方法
SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function(){
   console.log(this.age);
};

var instance1 = new SubType("Tom",29);
instance1.colors.push("black");
console.log(instance1.colors);
instance1.sayName();
console.log(instance1 instanceof SubType); //true

var instance2 = new SubType("Jack",29);
console.log(instance2.colors);
instance2.sayName();
四、原型式继承

其思想是,借助原型基于已有的对象创建新的对象,同时不必因此创建自定义类型

function object(o){
        function F(){};
        F.prototype = o;
        return new F();
    }

    var person = {
        name:"Jack",
        friends:["xiaomi","vivo","oppo"]
    };


    var anotherPerson = object(person);
    anotherPerson.name = "Lily";
    anotherPerson.friends.push("Tom");


    var yetAnotherPerson = object(person);
    yetAnotherPerson.name = "Andy";
    yetAnotherPerson.friends.push("Mary");


    console.log(person.friends);//"xiaomi", "vivo", "oppo", "Tom", "Mary"

相关文章

  • 005|JavaScript ES6新特性之Classes

    在过去,需要像 053|JavaScript 继承详解 那样实现继承。JavaScript这种继承实现方式与其它面...

  • 原型链继承的优缺点

    原型链继承的优缺点? 在OO语言中,继承方式通常有两种接口继承和实现继承。在JavaScript中无法实现接口继承...

  • js实现继承的几种方式

    如何实现继承? js中实现继承的方式主要是通过原型链完成的。了解原型链的相关信息可以点这里 javascript中...

  • Web前端经典面试试题及答案2

    javascript面向对象中继承实现? 面向对象的基本特征有:封闭、继承、多态。在JavaScript中实现继承...

  • 深入理解javascript中的继承机制 之 12种继承模式总结

    之前我们介绍了多种javascript中的继承方式,最后我们开始总结概括这些继承方式,先将javascript中的...

  • JavaScript中继承的实现方式---笔记

    继承的几种实现方式:原型链、借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合式继承;继承的实现,一般有接口...

  • JavaScript中实现继承的方式总结

    我们在对象创建模式中讨论过,对象创建的模式就是定义对象模板的方式。有了模板以后,我们就可以轻松地创建多个结构相同的...

  • javaScript 实现继承方式

    JavaScript实现继承共6种方式:原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承。

  • 理解 JavaScript 中的原型链

    JavaScript 作为一门面对对象语言,但是却不支持接口继承,只支持实现继承。JavaScript 中实现继承...

  • javascript继承

    首先,介绍一种成熟的JavaScript继承实现方式。然后,一步步梳理对于javascript原型和继承的理解。这...

网友评论

      本文标题:JavaScript中继承的实现方式---笔记

      本文链接:https://www.haomeiwen.com/subject/ydeeiqtx.html