2017-04-24 9 views
2

を拡張し、私は配列にいくつかの要素をプッシュするとき、私は、コードを使用して多くの場所を持っています。基本的には、この例だけではありません。私はどのfunc2を、すべてのものを取得し、例えば、それをログに記録する別の関数を実行したい。この後だから、既存の方法

func1.func2(...); 

:私は何をしたい、このようなものです。しかし、コードでこれらの機能がたくさんあり、すべての時間をこのような何かを書くことは望ましくない。私は自動的たいすべてのfunc1.func2()の結果を取得する別の独立した機能を実行する代わりに

if (func1.func2(...)) { 
    log_results(); 
} 

、およびそれを記録する。

+0

あなたは、状態管理のいくつかの並べ替えを持っていた場合、同様にこれらの追加の管理/デバッグ作業を行うことができ、あなたのために、このプッシュを処理するメソッドを持っていることは比較的容易であろう。 –

答えて

1

から.pushPlusStuff方法が利用できるようになります。関数に似たようなライブラリをたくさん用意しています(Lodash)。引数が部分的に適用された関数のコピーを返すメソッドと似ています:_.curry。私はそれをテストし、Array.prototype.pushで動作します。

いくつかの調査を行ったところ、この回答はJavaScript: clone a functionとなり、cloneメソッドを作成せずにやりたいことをすることにしました。

これは私が思いついたものです。 console.logを好きな機能や望むコードに置き換えてください。

Array.prototype.push = (function() { 
 
    var old = Array.prototype.push; 
 
    var push = function() { 
 
     console.log('my new push where I can do what I want, like log some stuff'); 
 
     return old.apply(this, arguments) 
 
    }; 
 
    return push; 
 
})(); 
 

 
var foo = []; 
 
foo.push(1,2,3); 
 
console.log(foo);

3

本当にこれを達成する唯一の方法は、あなたが望む余分な仕事をする機能でそれを包むことです。

function pushAndLog(item) { 
    arr.push(item); 
    // Additional Code here 
    logResults(); 
} 
0

あなたが実行したい任意の他の内側と次にpush使用アレイに別のプロトタイプを追加することができます。

let testArr = []; 
 

 
Array.prototype.pushPlusStuff = function(val) { 
 
    this.push(val); 
 

 
    console.log("executing other stuff here"); 
 
}; 
 

 
testArr.pushPlusStuff("test"); 
 

 
console.log(testArr);

これは、これは興味深い質問ですすべてArrays

0

実はgforce301コードが助けてくれました。私はGoogleのdataLayerを扱っていましたが、その作業はすべてのプッシュデータ(一部を除く)を記録することでした。このコードスニペットは、私を助け:

var dataLayer_copy = dataLayer.push; 
dataLayer.push = function() { 
    dataLayer_copy.apply(this, arguments); 
    console.log(JSON.stringify(arguments)); 
    $.post('/log', {data: arguments}, function() { 

    }, 'json'); 
}; 
関連する問題