2015-01-07 10 views
5

Przyjrzeniu kodu z Ulotka apiKorzystanie apply() vs call(), który z nich należy użyć w tym przypadku?

Moje pytanie brzmi dlaczego wrapperFn.apply(context, args); i fn.apply(context, args); użyciu apply() i nie zadzwonić().

Skąd wiadomo, którego użyć?

Mylić, ponieważ nie wiem z wyprzedzeniem, jeśli moja funkcja przekazywania używa tablicy lub nie.

 
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 -is-the-difference-between-call-and-apply – gaurav

+0

yes zastosuj tablice uses i listę używanych połączeń (zmienne rozdzielane przecinkami). co jeśli przekazuję listę argumentów w mojej funkcji. Następnie powinienem użyć call()? – airnet

Odpowiedz

0

Zastosuj przyjmuje pojedynczą tablicę argumentów, użytecznych przy łańcuchowaniu metod, ekwiwalencie javascript dla wywołania super. Java itp

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

połączeń odbywa listę parametrów, bardziej przydatnych innych sytuacjach, w których dostępne są jedynie w postaci pojedynczych zmiennych argumenty.

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

które mogłyby być po prostu skrótem

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

Given masz tablicę argumentów trzeba użyć apply()

+0

Ale nie wyprzedziłem czasu, jeśli moja funkcja przekazywania używa tablicy, czy nie? Właśnie dlatego jestem zdezorientowany – airnet

+0

argumenty to wbudowana magiczna zmienna, która jest wypełniona argumentami dla bieżącego wywołania funkcji, w twoim kodzie zapisujesz ją jako argumenty wcześniej. – Adam

+0

Ah dziękuję ..... – airnet

Powiązane problemy