5

私はJavaScript、特にOOPパターンから始めています。

私の質問は簡単です。セッターで、パラメーターとプライベート クラス変数の名前を同じにする方法はありますか? 私はいたるところを見てきましたが、それについて言及している人を見つけることができませんでした.var名が異なる例だけです。私は自分のコードに非常にうるさいので、2 つの異なる名前を付ける必要があります。

http://ejohn.org/blog/javascript-getters-and-setter/から例を取り上げます

function Field(val){
    this.value = val;
}
Field.prototype = {
    get value(){
        return this._value;
    },
    set value(val){
        this._value = val;
    }
};

セッターでパラメーターが val であることがわかりますが、プロパティは実際には値です。それはjavascriptであるため、「これ」が公開されるため、単に this.value=value を実行することはできません。value=value は両方のパラメーターを参照します (非常に奇妙になります)。これを行う方法は本当にありませんか?そうでない場合、この状況の「ベスト プラクティス」はありますか? アンダースコアは有効だと思いますが、私はうるさいので、他に方法がないことを確認したいだけです。

ありがとうございました!

4

2 に答える 2

5

クロージャーを使用して変数を非表示にすることができます。

function MyClass {
  var value;

  this.getValue = function() {
    return value;
  }

  this.setValue = function(val) {
    value = val;
  }

}

コンストラクターがMyClass終了すると、valueこのコンストラクター (関数) のみにスコープが設定されているため、フィールドにアクセスできなくなります。したがって、それvalueはプライベート フィールドであると言えます。ただし、メソッドgetValue()とメソッドsetValue()は、構築されたオブジェクトからパブリックにアクセスでき、の変数スコープへの参照を保持するため、MyClass引き続き を操作できますvalue

于 2012-04-28T00:56:37.197 に答える
1

クロージャの使用:

(function(exports){

    exports.field = {};
    var _value = '123';

    exports.field.get = function(){
        return _value;
    }

    exports.field.set = function(val){
        _value = val;
    }

})(window);

console.log(field.get());

これは、 JS のクロージャーに関する優れたチュートリアルです。

于 2012-04-28T00:52:39.880 に答える