如何在使用Google Closure Compiler時包含Ecmascript 6類?使用Google Closure Compiler包含Ecmascript 6類?
例如,我有 '的東西/ dog.js' 類:
class dog {
constructor() {
…
}
addLeg() {
this.legs++;
}
}
而且我希望把它列入 '的東西/ pound.js',所以我可以這樣寫:
let rex = new Dog();
這應該如何處理?我不能使用stuff.dog作爲類名,因此將調用傳遞給goog.provide()似乎不是一個選項。
感謝您的幫助!
編輯:採用最新(20160517 1.0)版本關閉編譯的,這可以用普通的EcmaScript 6進行處理:
Animal.js:
export default class{
constructor(){
this.legs = [];
}
addLeg(legId){
this.legs.push(legId);
}
}
Dog.js:
import Animal from './Animal';
export default class extends Animal {
constructor(){
super();
[1,2,3,4].forEach(leg=>this.addLeg(leg));
console.log('Legs: ' + this.legs.toString());
}
}
雖然它確實給我一個警告,因爲某些原因:Closure Compiler warns "Bad type annotation. Unknown type …" when Ecmascript 6 class is extended
個
您是否已經在使用Closure編譯器?如果你在'ECMASCRIPT_6'模式下運行它,ES6類定義應該被識別爲與傳統原型「類」定義相同的方式;他們並不是特例。如果你不是,你需要添加像goog.provide('dog')'和'goog.require('dog')'這樣的單獨文件。 –
我正在使用它,但我對它很陌生。當你說'在ECMASCRIPT_6模式下運行'你的意思是將language_in設置爲'ECMASCRIPT6_STRICT'? 我有這樣的設置,我嘗試導出和導入,goog.provide()和goog.require(),一些其他的隨機組合鍵,似乎沒有任何工作... – Seanonymous
是的,這就是我的意思。在這個問題中沒有足夠的信息來正確回答(Closure有很多選項/標誌,所以最好有一個你已經嘗試過的完整例子),但是:你可能要考慮使用'goog.module ',這個更新的系統表現得更像其他node.js模塊系統,雖然它仍然是路徑獨立的(你可以從任何地方goog.provide()名稱)。 [這裏是一個隨機的例子](https://github.com/vxq/js/blob/f1f0d354d77a39ebf403031fc719aeb150b7f952/vxq/worlds/turtles.js)使用'goog.module()','goog.require()'和'出口'。 –