2017-12-05 7 views
0

アトリビュートをアトリビュートに追加することで、ファンクションがコールされた回数をカウントしようとしています。カウンタは正常に動作しますが、関数の外部からその値にアクセスすることはできません。以下を参照してください。私の場合、なぜg.n2になるのですか?ファンクションアトリビュートのクロージャ付きコールをカウントする

var countFunc = function (func) { 
 
    func.n = 0 
 

 
    return function() { 
 
    func.n++; 
 
    console.log('called ' + func.n + ' times') 
 
    return func.apply(null, arguments) 
 
    } 
 
} 
 

 
var f = function (x) { return x }; 
 
var g = countFunc(f) 
 

 
console.log(g(1)); //called 1 times, 1 
 
console.log(g(2)); //called 2 times, 2 
 
console.log(g.n); //undefined

+3

[OK]を –

+0

f.n'元の関数の使用 'にカウンタを設定している、私が参照してください。そのプロパティを拡張機能に移すにはどうしたらよいですか? – jodoox

+0

私の答えをチェックしてください。 –

答えて

0

だけではなく、オリジナルのものに新たに作成された関数にカウンターを保存します。

var countFunc = function (func) { 
 
    function wrapped() { 
 
    wrapped.n++; 
 
    console.log('called ' + wrapped.n + ' times') 
 
    return func.apply(null, arguments) 
 
    }; 
 
    
 
    wrapped.n = 0; 
 
    
 
    return wrapped; 
 
} 
 

 
var f = function (x) { return x }; 
 
var g = countFunc(f) 
 

 
console.log(g(1)); //called 1 times, 1 
 
console.log(g(2)); //called 2 times, 2 
 
console.log(g.n); //2

+0

これは私が探していた答えだ。 – jodoox

関連する問題