關(guān)于javascript中的 "繼承"

圖片來自你不知道的javascript

使用js模擬面向?qū)ο罄^承:先上最終的代碼

function Person(name, age) {
  this.name = name
  this.age = age
}

Person.prototype.getName = function () {
  return this.name
}
Person.prototype.getAge = function () {
  return this.age
}

function Teacher(name, age, subject) {
  Person.call(this, name, age)
  this.subject = subject
}
// 繼承方法的最終方案:
// ES6 之前拋棄默認的 Teacher.prototype
// Teacher.prototype = Object.create(Person.prototype)
//ES6 開始直接修改現(xiàn)有的 Teacher.prototype
Object.setPrototypeOf(Teacher.prototype, Person.prototype)
Teacher.prototype.constructor = Teacher
console.log(Teacher.prototype)

let teac = new Teacher('zs', 18, 'gaoshu')
console.log(teac.getName())
console.log(teac.constructor)

1. 先創(chuàng)建一個Person函數(shù)

function Person(name, age) {
  this.name = name
  this.age = age
}

2. 完善Person.prototype的方法

Person.prototype.getName = function () {
  return this.name
}
Person.prototype.getAge = function () {
  return this.age
}

3. 使用new來新建teac對象

let teac = new Teacher('zs', 18, 'gaoshu')

4. 此時teac只有Peoron函數(shù)的屬性,并沒有繼承Person.prototype的方法,所以需要繼承方法,方法二選一,后者性能略微好一些

// ES6 之前會拋棄默認的 Teacher.prototype
Teacher.prototype = Object.create(Person.prototype)
//ES6 開始直接修改現(xiàn)有的 Teacher.prototype
Object.setPrototypeOf(Teacher.prototype, Person.prototype)

5. 此時雖然繼承了方法,但是Teacher.prototype.constructor的值是Person,想一下為什么?所以我們來修復(fù)它

Teacher.prototype.constructor = Teacher
  1. 以上
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容