我想在新項目中使用EcmaScript 6(通過Browserify和Babelify),但它取決於ES5中編寫的第三方庫。問題是在我的項目中創建子類,這些子類從庫中的子類延伸出來。在ES6代碼中擴展EcmaScript 5類
E.g:
// Library written in ES5
function Creature(type) {
this.type = type;
}
// my code in ES6
class Fish extends Creature {
constructor(name) {
super("fish");
this.name = name;
}
}
這幾乎工程,除了生物()構造函數無法運行。我設計了一個解決方法/破解它首先構造父類的對象,然後追加的東西吧:
class Fish extends Creature {
constructor(name) {
super("throw away"); //have to have this or it wont compile
let obj = new Creature("fish");
obj.name = name;
return obj;
}
}
這種做法似乎只要工作,因爲原來的類沒有「構造」的功能。
我的問題是:是使用ES6的類時擴展它們的最佳方式(保存從請求庫的作者遷移)?還是有更好的辦法?我想繼續在我的項目中使用class {}語法。
Babel依靠ES5類正確設置'Creature.prototype.constructor = Creature',也許你沒有做到這一點?如果父類是絕對基類,那應該自動發生,但是如果父類有它自己的父類,那麼可能它有錯誤的'.constructor'。 – loganfsmyth