在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C  HTML/ js繼承,為什么ClassB.prototype.__proto__ = Cla

js繼承,為什么ClassB.prototype.__proto__ = ClassA.prototype不能用?

先貼代碼

function ClassA(name) {
    this.name = name
}

ClassA.prototype.sayName = function () {
    // 省略
}

function ClassB(name, age) {
    ClassA.call(this, name)
    this.age = age
}

// 為什么下面這句不能用???
ClassB.prototype.__proto__ = ClassA.prototype

ClassB.prototype.sayAge = function () {
    // 省略
}

let instance = new ClassB('小明', 11)

如題,為何在實現(xiàn)繼承中,ClassB.prototype.__proto__ = ClassA.prototype不能用?

回答
編輯回答
孤慣

Object.prototype.__proto__,事實證明可以使用

function ClassA(name) {
      this.name = name
    }

    ClassA.prototype.sayName = function () {
      alert(this.name)
    }

    function ClassB(name, age) {
      ClassA.call(this, name)
      this.age = age
    }

    ClassB.prototype.__proto__ = ClassA.prototype

    ClassB.prototype.sayAge = function () {
      alert(this.age)
    }

    let instance = new ClassB('小明', 11)
    instance.sayName(); //小明
    instance.sayAge();  //11
2017年5月11日 09:36
編輯回答
命于你

__proto__是瀏覽器為了讓你能訪問對象的原型而添加的屬性,不是標(biāo)準(zhǔn)吧,只有在部分瀏覽器里才可以使用,你可以這樣修改一下:

function ClassA(name) {
      this.name = name
    }

    ClassA.prototype.sayName = function () {
      alert(this.name)
    }

    function ClassB(name, age) {
      ClassA.call(this, name)
      this.age = age
    }

    ClassB.prototype.constructor.prototype = ClassA.prototype // 使用constructor.prototype 訪問原型

    ClassB.prototype.sayAge = function () {
      alert(this.age)
    }

    let instance = new ClassB('小明', 11)
    instance.sayName(); //小明
    instance.sayAge();  //11
2017年3月16日 03:19
編輯回答
墨小白

可能是你瀏覽器不支持吧。不過不推薦直接操作__proto__屬性

function ClassA(name) {
    this.name = name
}

ClassA.prototype.sayName = function () {
    // 省略
}

function ClassB(name, age) {
    ClassA.call(this, name)
    this.age = age
}

// 效果等同于ClassB.prototype.__proto__ = ClassA.prototype
ClassB.prototype = Object.create(ClassA.prototype)

ClassB.prototype.sayAge = function () {
    // 省略
}

let instance = new ClassB('小明', 11)
2017年11月24日 00:08