7648


javascriptで自分を書き換えるメソッドを定義します。  
このメソッドを代入してから、代入後の変数名で呼び出しても再定義が動作しません。  
回避策はありますか？

[code]

    // 自分を書き換える関数
    var funcA = function(){
        console.log("A");
        funcA = function(){
            console.log("B!");
        }
    };
    
    // 代入
    var funcB = funcA;
    
    // グローバルのfuncAは再定義されるが、funcBは古いポインタを指している。
    funcB();  // Aが表示される
    funcB();  // またAが表示される
    
[/code]


CC BY-SA 3.0
2015-03-09T08:22:23.717
7647
2015-03-09T09:05:19.420
3496
question
javascript
javascriptの自己再定義メソッドを代入後に使うには？


もう一階層ラップして自分を書き換える関数を返す関数

[code]

    var funcA = (function() {
        var f = function() {
            console.log("A");
            f = function(){
                console.log("B!");
            }
        }
        return function() {
            f();
        };
    })();
    
[/code]


CC BY-SA 3.0
2015-03-09T08:45:25.730
7648
2015-03-09T08:45:25.730
241
7647
answer


間接参照にする。

[code]

    var funcA = {};
    funcA.fn = function(){
        console.log("A");
        funcA.fn = function(){
            console.log("B!");
        }
    };
    var funcB = funcA;
    funcB.fn();//"A"
    funcB.fn();//"B!"
    
[/code]


CC BY-SA 3.0
2015-03-09T09:05:19.420
7654
2015-03-09T09:05:19.420
5044
7647
answer