美文网首页Javascript
js6种继承方式

js6种继承方式

作者: 2c半度虚华 | 来源:发表于2020-01-17 14:53 被阅读0次

首先我们要提供一个父类

function Person(name,date){
    this.name=name;
    this.date=date;
    this.sum=function(){
        console.log(this.name)
    }
}
Person.prototype.age=10; //给构造函数添加原型属性

原型链继承:

function Per(){
    this.name="ker"
}
Per.prototype=new Person();  //新实例的原型等于父类的实例
var per1=new Per();
console.log(per1.name); //10
console.log(per1 instanceof Person); //true

原型链可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性
缺点:1.新实例不可想父类传参,只能单方面的接受。
2.所有的新实例都公用父类属性,只要父类发生改变则都会发生改变,牵一发而动全身。
借用构造函数继承:

function Con(){
    Person.call(this,"jer","12/17"); //用.call()和.apply()将父类构造函数引入子类函数(在子类函数中做了父类函数的自执行(复制))
    // this.age=12
}
var con1=new Con();
console.log(con1.name);
console.log(con1.date);
console.log(con1.age); //不能继承父类原型的属性
console.log(con1 instanceof Person); //false

借用构造函数继承他只能继承父类构造函数的属性,而不能继承他的原型属性,其根本原因就是父类构造函数仅仅只是在子类函数内部复制而已。同样我们也可以利用call()和apply()来继承多个构造函数
缺点:1.只能继承父类构造函数的属性,而不能继承他的原型属性。
2.无法实现对构造函数的复用。
2.每一个新实例都要有父类的钩爪函数而显得臃肿。
组合继承

function SubType(name){
    Person.call(this,name);
}
SubType.prototype=new Person(); //原型链继承
var sub = new SubType("gar");
console.log(sub.name);//"gar"继承了构造函数属性
console.log(sub.age);//10继承了父类原型的属性

组合继承顾名思义是结合了上面两种的继承的特点,同时也解决了上面两种的缺点,因此在平时也更加常用。
缺点:两次调用构造函数耗内存,
原型式继承

function content(obj){
    obj.a=11
    function F(){} 
    F.prototype=obj; //传入参数
    return new F(); //返回函数对象
}
var sup=new Person(); 
var sup1=content(sup)
console.log(sup1.a);//11

原型式继承用一个函数包装一个对象,然后返回这个函数的调用,这个函数就变成了个可以随意增添属性的实例或对象。
缺点:1.所有实例都会继承原型上的属性。
2.无法实现复用。(新实例属性都是后面添加的)

寄生式继承


相关文章

  • js6种继承方式

    首先我们要提供一个父类 原型链继承: 原型链可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性...

  • js6种继承模式

    继承是面向对象编程中又一非常重要的概念,JavaScript支持实现继承,不支持接口继承,实现继承主要依靠原型链来...

  • 原型继承

    原型链的继承 1.第一种继承方式(原型链继承) 2.第二种继承方式(第二种继承方式) 3.第三种继承方式(组合继承)

  • 第十三章 类继承(4)c++的三种继承方式

    (四)c++的三种继承方式 c++有三种继承方式,分别是公有继承,私有继承和保护继承。 (1)公有继承 这是最常用...

  • 前端 | JS | 面试中不得不知道的JS 继承的五种方式

    目录: JS中继承的概念 为什么要使用继承? 继承的第一种方式:原型链继承1 继承的第二种方式:原型链继承2 继承...

  • 创建线程的两种方式及静态代理

    创建线程有两种方式一种是继承Thread类另一种是继承Runnable接口实现静态代理。 1.继承Thread方式...

  • JS中继承的方式

    讨论三种常用的继承方式: 组合继承 原型新对象继承 3 . 寄生继承

  • js 的继承的几种方式

    js 继承有6种方式的代码。 js继承的6种方式[https://www.cnblogs.com/Grace-zy...

  • C++继承,静态成员,const成员

    继承 继承的方式有三种 公共继承 保护继承 私有继承 访问权限publicprotectedprivate对本类可...

  • JavaScript如何实现继承?

    JS 中的继承主要分为两种:原型继承和非原型继承,非原型继承又分为寄生方式继承、借用或伪造构造函数方式继承、组合方...

网友评论

    本文标题:js6种继承方式

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