2016-11-06 8 views
3

どのようにしてES6クラスメソッドをES5にポリフィルするのですか?es5のES6メソッド(クラス)に相当するものは何ですか?

私は本を読んでいると、それは、次の言葉:

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

    swingSword() { 
     return true; 
    } 
} 

たちは内部でプロトタイプにswingSwordを追加していない理由を私は求めています

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

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

と同じですコンストラクタ関数?

この関数はプロトタイプチェーンではなく、オブジェクト上に存在する必要があるためです。

私は間違っていますか?

+1

あなたが間違っている、本は正しいです。 –

答えて

0

プロトタイプ上にある必要があります。メソッドはインスタンスごとのデータではありません。そのような方法を実装している言語について考えることはできません。クラスの考え方全体は、同じメソッドセットを持つオブジェクトのクラス全体を持つことです。

コンストラクタ関数内に置くと、コンストラクタで作成されたインスタンスごとに固有の関数になります。例えば、1000個のオブジェクト== 1000個の「メソッド」ごとの関数を含む。

+0

答えをありがとう。今私はそれを得る。 –

+0

問題ありません、そのチェックマークをクリックして正しい答えとして受け入れてください;-) –

0

オブジェクトだけに関数を追加すると、Ninjaの場合にのみ機能します。 Ninjaを拡張するクラス、たとえばKunoichiを作成するには、通常Ninjaプロトタイプをコピーします。残念ながらswingSwordはプロトタイプに含まれていないため、Kunoichiは剣を振ることはできません。

クラスを拡張できるように、関数をプロトタイプで追加する必要があります。

関連する問題