2016-11-06 63 views
3

我們如何將es6類​​方法填充到ES5中?什麼是ES5中ES6方法(類)的等價物?

我正在讀一本書,它說以下內容:

class Ninja { 
    constructor(name) { 
     this.name = name; 
    } 

    swingSword() { 
     return true; 
    } 
} 

相同

function Ninja(name) { 
    this.name = name; 
} 

Ninja.prototype.swingSword = function() { 
    return true; 
}; 

我只是問爲什麼我們在原型添加swingSword,而不是裏面的構造函數?

因爲函數應該在對象上而不是在原型鏈上。

我是對還是錯?

+1

你錯了,這本書是對的。 –

回答

0

它應該在原型上,方法不是每個實例的數據。無法想象任何以這種方式實現它的語言,類的整個概念就是擁有一組具有相同方法的對象。

如果將它放在構造函數中,它將是每個實例使用構造函數創建的唯一函數。例如,1000個對象== 1000個函數,每個「方法」。

+0

感謝您的回答。現在我懂了。 –

+0

當然沒有問題,請點擊該複選標記以接受它作爲正確答案;-) –

0

僅將該功能添加到對象只能用於Ninja。要創建一個擴展爲Ninja的類,例如Kunoichi,通常需要複製Ninja原型。不幸的是,因爲swingSword不在原型中,所以你的Kunoichi不能揮動劍。

您必須在原型中添加該函數以允許擴展該類。

相關問題