2015-01-07 61 views
5

考慮看看代碼傳單API使用apply()vs call(),在這種情況下使用哪一個?

我的問題是,爲什麼wrapperFn.apply(context, args);fn.apply(context, args);使用適用(),而不是調用()。

你怎麼知道使用哪一個?

困惑,因爲我不知道我的傳遞函數是否使用數組。

 
limitExecByInterval: function (fn, time, context) { 
     var lock, execOnUnlock; 

     return function wrapperFn() { 
      var args = arguments; 

      if (lock) { 
       execOnUnlock = true; 
       return; 
      } 

      lock = true; 

      setTimeout(function() { 
       lock = false; 

       if (execOnUnlock) { 
        wrapperFn.apply(context, args); 
        execOnUnlock = false; 
       } 
      }, time); 

      fn.apply(context, args); 
     }; 
    }, 

+2

http://stackoverflow.com/questions/1986896/what -This-the-difference-between-call-and-apply – gaurav

+0

是應用使用數組,而調用使用列表(逗號分隔變量)。如果我在我的函數中傳遞參數列表,該怎麼辦?那麼我應該使用call()? – airnet

回答

0

應用程序需要一個參數的單個數組,用於方法鏈接,相當於調用super的javascript。在Java中等等

function makeNoise() { 
    Foo.prototype.makeNoise.apply(this, arguments); 
} 

調用需要的參數,更加有用的其他情況下的參數僅作爲單一變量列表。

fn.call(this, x, y, z); 

這也只是速記

fn.apply(this, [x, y, z]) 

鑑於你有你需要使用申請()參數數組

+0

但我不提前,如果我的傳球功能是使用數組或不是?這就是爲什麼我很困惑 – airnet

+0

參數是一個內置的魔術變量,它是用當前函數調用的參數填充的,在你的代碼中你將它保存爲早先的參數。 – Adam

+0

啊謝謝..... – airnet

相關問題