js 继承的四种方式:
-
原型继承:
将父类的实例作为子类的原型;简单易于实现:
function Parent1() { this.name = ['super1'] this.reName = function () { this.name.push('super111') } function Child1() { } Child1.prototype = new Parent1() var child11 = new Child1() -
构造函数继承:
使用父类的构造函数增强子类的实例,实际上就是复制父类的实例;
通过 call,apple 复制父类的实例属性给子类(没用到原型),在创建的子类里面进行实例化
function Parent1(){ this.sex = ['男']; this.reName = function(){ this.name.push('super111'); } } function Child1(){ Parent1.call(this.sex); console.log(this.sex); }优点:可以复制多个父类的属性实例
-
组成继承:
在子类里面用 call 或 apply 子类外,先加上原型父类再实例化子类
function Animal(name) { //设置属性 this.name = name; //设置实例方法 this.eat = function() { return this.name + "正在吃饭"; }; } var pig = function(name) { Animal.apply(this, arguments); //复制父类的实例属性 }; pig.prototype = new Animal(); //给子类的原型为父类的实例优点:可以继承到原型属性和方法
缺点:生成了两个实例,消耗内存
-
寄生继承
实例话继承子类里用一个新变量实例化的父类对象,返回新变量
function Animal(name) { //设置属性 this.name = name; //设置实例方法 this.eat = function() { return this.name + "正在吃饭"; }; } //创建一个子类 function dog(name) { var quan = new Animal(); //子类里用一个新变量实例化父类对象,返回新变量, quan.name = "狗"; return quan; } var dogs = new dog();优点:不限制调用方式,不管是 new,还是直接=,都可以
缺点:实例的是父类的实例,不能多继承
本文由 倪建成学习时 编辑,只是普通笔记。若是对你有用,可以自行转载
最后编辑时间为:2019-07-25 00:00:00