6

es6 クラス メソッドを ES5 にどのようにポリフィルしますか?

私は本を​​読んでいますが、次のように書かれています。

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

    swingSword() {
        return true;
    }
}

と同じです

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

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

コンストラクター関数内ではなく、プロトタイプに swingSword を追加するのはなぜですか?

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

私は正しいですか、それとも間違っていますか?

4

3 に答える 3

1

メソッドはインスタンスごとのデータではありません。そのように実装する言語は考えられません。クラスの全体的な考え方は、同じメソッドセットを持つオブジェクトのクラス全体を持つことです。

コンストラクター関数内に配置すると、コンストラクターで作成されたインスタンスごとに一意の関数になります。たとえば、「メソッド」ごとに 1000 個のオブジェクト == 1000 個の関数。

于 2016-11-06T07:23:47.113 に答える
0

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

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

于 2016-11-06T07:23:59.563 に答える