1. ホーム
  2. javascript

[解決済み] TraceurでES6クラスのプライベートメソッドを実装する方法【重複あり

2022-04-28 19:30:40

質問

現在、ES6の機能を活用するために、Traceur Compilerを使用しています。

ES5から実装したいのですが。

function Animal() {
    var self = this,
        sayHi;

    sayHi  = function() {
        self.hi();
    };

    this.hi = function() {/* ... */}
}

現在、traceur は privatepublic キーワード ( ハーモニーから ). また、ES6 のクラス構文では、単純な var (または let ) をクラス本体内に記述します。

私が見つけた唯一の方法は、クラス宣言の前にプライベートをシミュレートすることです。次のようなものです。

var sayHi = function() {
    // ... do stuff
};

class Animal {
...

何もしないよりはましだが、さすがに正解はないだろう。 this を使用せずにプライベートメソッドに apply -または bind -を毎回つけています。

そこで、traceurコンパイラと互換性のあるES6クラスでプライベートデータを使用する可能性はあるのでしょうか?

どのように解決するのですか?

はありません。 private , public または protected のキーワードは、現在の ECMAScript 6仕様 .

そのため、Traceur は privatepublic . 6to5(現在は"Babel"と呼ばれています)を実現します。 本提案 実験的な目的で 本論 ). でも、あくまで提案ですからね。

というわけで、今のところプライベートプロパティは WeakMap (参照 ここで ). もう一つの選択肢は Symbol - を通して簡単にアクセスできるため、実際のプライバシーは確保できません。 Object.getOwnPropertySymbols .

IMHOは、現時点での最善の解決策は、単に擬似的なプライバシーを使用することです。もしあなたが頻繁に apply または call を指定した場合、このメソッドは非常にオブジェクトに依存します。そのため、クラス内でアンダースコアのプレフィックスを付けて宣言するのがよいでしょう。

class Animal {

    _sayHi() {
        // do stuff
    }
}