1

たくさんの変数を格納するこのモジュールパターンがあります。任意の変数を返すことができる単一の関数を作成したいと思います(実際のモジュールには実際の関数があります-これは単なるストライプダウンバージョンです)。

var myObject = (function() {
  var _savings = '100',
      _year = new Date().getFullYear(),
      _phone = '1-800-555-1234';

return {
  getMe: function(param) {
    return eval(param);
}

使用例は、myObject.getMe('phone');「1-800-555-1234」をうんちすることです。

eval()は非常に邪悪なので、使用を避けたいと思います。

ありがとう!

4

4 に答える 4

3

javascriptでは、はとobject.field同等object["field"]です。

ここでの問題は、オブジェクトに属していないいくつかのプライベート変数を作成したため、それらにアクセスするのが難しいことです。

別のアプローチはこれです:

var myObject = (function() {
  var _privates = {
    savings: '100',
    year: new Date().getFullYear(),
    phone: '1-800-555-1234'
  };

return {
  getMe: function(param) {
    return _privates[param];
  }
}())
于 2012-06-22T16:50:29.763 に答える
0

これをオブジェクト指向の方法で行うと、最初にメンバー* _savings *、* _ year *、* _phone*を使用してプロトタイプ定義を作成できます。getMeをプロトタイプに追加します。

var myClass = function() {
    this._savings = '100',
    this._year = new Date().getFullYear(),
    this._phone = '1-800-555-1234';

    myClass.prototype.getMe = function(param) {
       return this[param]; 
    }
}

次に、オブジェクトをインスタンス化し、メソッドを実行します。

var myObject = new myClass();
console.log(myObject.getMe("_savings"));
  // "100"

元の回答を編集しました(Dancrumbが指摘しているように、これは機能しません。これらはプライベートメンバーであるため、関数getMe内ではそれらを表示する方法はありません)。

角かっこ表記を使用します。

this[param]を返します;

于 2012-06-22T16:47:06.933 に答える
0

次のことを試してください。

var myObject = (function() {
    var data = {
        savings: '100',
        year: new Date().getFullYear(),
        phone: '1-800-555-1234'
    };
    return {
        getMe: function(param) {return data[param];}
    };
})();
于 2012-06-22T16:48:18.947 に答える
0
var myObject = {
    phone: '1-800-555-1234',
    year: new Date().getFullYear(),
    savings: 100,
    getMe: function(param) {
        return this[param];
    }
};
alert(myObject.getMe('phone'));
于 2012-06-22T16:52:08.887 に答える