有關繼承

有關繼承

function Graph() {
  this.vertices = [];
  this.edges = [];
}

const g = new Graph();

g.hasOwnProperty('edges')
// true

Graph.prototype.c = 123

// 繼承父親的屬性會在 __proto__ 顯示
g.hasOwnProperty('c')
// false

g.__proto__.hasOwnProperty('c')
// true

似乎將

改成

都可以跑,但這樣不是應該會蓋掉Dog的prototype,而找不到name屬性報錯嗎

以上的解釋是

EventEmitter的屬性是後來用

去定義的,而不是一開始的建構子

而下面這三個,只讀的到後來用EventEmitter.prototype.xxx定義的東西

想要繼承到建構子跟後來定義的prototype只能用以下這個方法

可看下面的範例

而使用Dog.prototype= DDog.prototype;也不會覆蓋原本的Dog建構子

避免將函式內的屬性設為name

其他預設屬性也不要使用,拿來命名屬性

使用prototype指定屬性後要用new出新物件後才可使用

delete可用來刪除函式中的方法

如果要刪除prototype加上prototype即可,其子代的該方法也被一併刪除

ES5 With Object.create

更多可參考

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

Last updated

Was this helpful?