面試必問之繼承

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);
相關文章
相關標籤/搜索