每日灵魂一问-继承的6种方法(上)

Posted NANA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日灵魂一问-继承的6种方法(上)相关的知识,希望对你有一定的参考价值。

一.原型链继承(prototype)

就是把要继承的方法写在原型链上

function Parent() {
    this.name = \'parent1\';
    this.play = [1, 2, 3]
  }
  function Child() {
    this.type = \'child2\';
  }
  Child.prototype = new Parent();

缺点:实例化的对象共用一个内存地址

二.构造函数继承(call)


 function Parent(){
    this.name = \'parent1\';
}

Parent.prototype.getName = function () {
    return this.name;
}

function Child(){
    Parent.call(this);
    this.type = \'child\'
}

let child = new Child();
console.log(child);  // 没问题
console.log(child.getName());  // 会报错

但是只能继承父类的实例属性和方法,不能继承原型属性或者方法

三.组合继承(手动挂上构造器,指向自己的构造函数)


 function Parent3 () {
    this.name = \'parent3\';
    this.play = [1, 2, 3];
}

Parent3.prototype.getName = function () {
    return this.name;
}

function Child3() {
// 第二次调用 Parent3()
    Parent3.call(this);
    this.type = \'child3\';
}

// 手动挂上构造器,指向自己的构造函数
// 第一次调用 Parent3()
Child3.prototype = new Parent3();
Child3.prototype.constructor = Child3;

var s3 = new Child3();
var s4 = new Child3();
s3.play.push(4);
console.log(s3.play, s4.play);  // 不互相影响
console.log(s3.getName()); // 正常输出\'parent3\'
console.log(s4.getName()); // 正常输出\'parent3\'

缺点:造成了多构造一次的性能开销

以上是关于每日灵魂一问-继承的6种方法(上)的主要内容,如果未能解决你的问题,请参考以下文章

node.js每日灵魂一问- node.js的fs模块&常用方法

每日灵魂一问- Node 中 Buffer 的理解

每日灵魂一问-对WebSocket的理解?应用场景?

每日灵魂一问-Nodejs文件查找的优先级&Require 方法的文件查找策略?

每日灵魂一问-关于react

每日灵魂一问-如何实现文件上传?