面试必问之继承

2019-02-05  本文已影响0人  前端陈晨

js继承常用的三种方法,记录一下,马上要面试了。

觉得有用可以帮我点个赞吗?谢谢了。

    // 原型链继承
    function Parent() {
      this.name = '原型链继承';
      this.play = [1,2,3];
    }
    Parent.prototype.getName = function () {
      console.log(this.name);
    }

    function Child() {
      this.type = '原型链继承child';
    }
    Child.prototype = new Parent();
    // 原型链上的原型对象是通用的,改变一个,其他的都会改变,但我们不想所有对象都改变
    var child1 = new Child();
    var child2 = new Child();
    child1.play.push(4)
    console.log(child1.play)
    console.log(child2.play)
    // 构造函数继承
    function Parent() {
      this.name = '构造函数继承';
      this.play = [1,2,3];
    }
    Parent.prototype.getName = function () {
      console.log(this.name);
    }

    function Child() {
      Parent.call(this)
      this.type = '构造函数继承child';
    }

    var child1 = new Child();
    console.log(child1.getName)
    //构造函数继承不会继承原型链上的方法
    // 组合继承
    // 原理:创建中间对象,中间对象的原型对象是父类的
    function Parent() {
      this.name = '组合继承';
      this.play = [1,2,3];
    }
    Parent.prototype.getName = function () {
      console.log(this.name);
    }

    function Child() {
      Parent.call(this)
      this.type = '组合继承child';
    }
    Child.prototype = Object.create(Parent.prototype);
    Child.prototype.constructor = Child;
    //没有这句代码,Child.prototype.constructor会指向Parent
    var child = new Child()
    console.log(child instanceof Child,child instanceof Parent);
    console.log(child.constructor);
上一篇下一篇

猜你喜欢

热点阅读