2017-07-19 1 views
3

編集:これはsetTimeoutでパラメータを渡す方法の複製ではありません。実際には、setTimeout APIと同じように、あらかじめ定義された関数でメソッドと呼ばれる関数をどのように書くことができるのかを知りたい。だから、指定された期間の後に任意の関数を呼び出すことができる関数 'callAfter'の実装

、どのように私は、次の上記の構文で、特定のパラメータを持ついくつかの指定された期間の後に呼び出されるすべての機能が有効になります関数「callAfter」の実装を書くことができます。

例:できますが、あなたが持っていると言います

function sum(a, b) { 
console.log('Sum is: ', a + b); 
} 

今、あなたが実行することができるはずです::そうLIKE '合計' と呼ばれる機能 sum.callAfter(5000、8、9)。パラメータ8および9

+0

タイムアウトを使用します。 https://www.w3schools.com/js/js_timing.asp – Etherealm

+0

[パラメータをsetTimeout()コールバックに渡すにはどうすればいいですか?](https://stackoverflow.com/questions/1190642/how-can) -i-pass-a-settimeout-callback) – Etherealm

+1

インタビュー/宿題のような質問です。これまでに何を試しましたか? – lxe

答えて

7

関数プロトタイプを使用して取得:

Function.prototype.callAfter = function(){ 
    if(arguments.length > 1){ 
     var args = Array.prototype.slice.call(arguments); 
     var time = args.splice(0,1); 
     var func = this; 
     setTimeout(function(){ 
      func.apply(null, args); 
     }, time); 
    } 

}

+0

丁寧な回答ですが、参考にして、ネイティブJavaScriptオブジェクトのプロトタイプを調整するのは面倒です。それは動作しますが、コードのメンテナンスやライブラリの組み込みに関しては問題を引き起こす可能性があります。 – zfrisch

+0

@zfrischそれは本当です。もっと良い解決策を見せてくれますか?実際、私はより良いアプローチを探しています。 –

0

function sum(a, b) { 
 
    console.log('Sum is: ', a + b); 
 
} 
 
function callWithDelay(fn, arg1, arg2, delay) { 
 
    setTimeout(function() { fn(arg1, arg2) }, delay); 
 
} 
 
callWithDelay(sum, 3, 5, 1000);

と5秒後に

機能を呼び出す必要があり

'合計'、それは非常にきれいではないですが、これは、それを行う必要がありますが:)

関連する問題