1

私は次のようなJavascript名前空間を作成しました:

var MyApp = function() {
      return {
        someFunction : function(x) {}
             alert(MyApp.y);
      }
}();

これにより、これを行うことができます。

MyApp.someFunction(x);

私は次のことができるようになりたいです:

MyApp.y = "test"私のsomeFunctionがこの変数Yにアクセスできるようにします。

これを解決する方法について何かアイデアはありますか?NS構文をそのままにして、サンプルコードで機能するソリューションがあればいいのですが。

4

2 に答える 2

2

あなたが説明したことはうまくいくはずです。(構文エラーと未使用の引数がある場合を除きますx。)

var MyApp = function() {
  return {
    someFunction : function(x) {
         alert(MyApp.y);
    }
  }
}();
MyApp.y = 'test';
MyApp.someFunction() // alerts 'test'

もう1つのアプローチは、外部関数をコンストラクターのように扱い、yをクロージャーとして渡すことです。

var MyApp = (function (y) {
    return {
        y: y,
        someFunction: function () {
            alert(MyApp.y); // or alert(this.y)
        }
    }
} ('test'));
MyApp.someFunction(); // alerts 'test'
于 2011-12-15T13:45:27.630 に答える
2

私はこのようなもので行きます:

var MyApp = function() {
    var _y = "default value";
    return {
        someFunction: function(x) {
            console.log(_y);
        },
        setY: function (y) {
            _y = y;
        }
    }
}();

MyApp.someFunction()これは、に値を割り当てる前に安全に呼び出すことができることを意味しますy。また、変数の内容が名前空間のスコープ内に維持されることも意味します。

console.log(MyApp._y); // undefined

使用方法は次のとおりです。

MyApp.someFunction(); // "default value"
MyApp.setY("new value");
MyApp.someFunction(); // "new value"
于 2011-12-15T13:53:41.393 に答える