3

次のコードでは、私は渡しています

(function(Index){
    Index.Index = function(){console.log(23)};

    Index = function(){console.log(123)};


}(Window.Index = Window.Index || {}));    

しかし、私が得ているリターンはWindow.Index={Index:function...}

どのログ23。

関数として再宣言できるようにしようとしています。たとえば、期待値は次のようになります。

Window.Index = function(){console.log(123)};

私は何が間違っているのですか?

4

1 に答える 1

1

関数で取得する変数は、Indexオブジェクトへの参照であり、この参照を含む変数への参照ではありません。javascriptでは、オブジェクトの場合にそれらの値が参照である場合でも、引数は常に値によって渡されます。

解決策は

1)渡すwindow(つまり、Indexプロパティを保持するオブジェクト)

(function(holder){
    holder.Index = function(){console.log(123)};
})(window);

2) window.Indexを直接変更する:

(function(){
    window.Index = function(){console.log(123)}; // or omit 'window', that's the same
})();

3)プロパティの名前を渡す:

(function(holder, propname){
    holder[propname] = function(){console.log(123)};
})(window, "Index");

4)コールバックを渡す:

(function(callback){
    var Index = function(){console.log(123)};
    callback(Index);
})(function(v){window.Index=v});

基本的に共通のモジュールパターンを使用していることに注意してください。

于 2013-02-12T10:25:03.100 に答える