2015-10-03 31 views
2

這裏是simple plunker example涉及類的繼承,具有墊片和巴貝爾選項被設置爲stage: 0, loose: 'all'巴貝爾protoToAssign「變壓器和ES6類繼承

class Hello { 
    static address = ', world!'; 
    greeting = 'Hello'; 

    constructor() { 
    this.greet(); 
    } 

    greet() { 
    document.write(this.greeting + Hello.address); 
    } 
} 

class Hi extends Hello { 
    greeting = 'Hi'; 

    constructor() { 
    super(); 
    } 
} 

new Hi().greet(); 

顯然,它的作品,因爲它應該在IE5.5 +。

Babel spec.protoToAssign變壓器對於針對傳統瀏覽器的ES6/ES7轉換後的OOP代碼有利(或不希望)有什麼情況?

回答

2

ES6類繼承也意味着

Hi.address 

會的工作,因爲Hi繼承Hello。沒有protoToAssign,這在IE < = 10中不起作用。

但是,一般情況與該頁面上描述的完全相同。 IE < = 10不支持__proto__的轉讓,所以如果您依賴於依賴它的行爲,它將不起作用。

這都包含在巴貝爾的caveats頁面中。

+0

太好了,謝謝,我明白了。靜態屬性是依賴於'__proto__'的Babel類實現中唯一的東西嗎?我最近偶然發現了[這篇文章](http://ricostacruz.com/til/babel-ie-class-inheritance.html),它聲稱'super'依賴於'Object.getPrototypeOf',因此會在老的時候失敗IE瀏覽器,但它不是我的經驗,也沒有遇到'Object.getPrototypeOf'在傳譯代碼。 – estus

+0

這一切都涵蓋在Babel的[警告](http://babeljs.io/docs/advanced/caveats/)頁面中,請參閱關於類的章節。如果您需要支持IE <= 8,您可能需要啓用「鬆散模式」。 – loganfsmyth

+0

當然,謝謝,我已經在上面的示例中啓用了鬆散模式。 – estus