2012-07-04 1 views
0

: 코드 때문에, 내가하지 않는 무엇o.bind.apply (arguments); 나는 이런 식으로 뭔가 보이는 JQuery와 작은 펍/서브, 찾고 있어요

(function($){ 
    var o = $({}); 

    $.subscribe = function() { 
    o.bind.apply(o, arguments); 
    }; 

    ... 

})(jQuery); 

는이 o.bind 호출은 "이"내부 바인드입니다 어쨌든, 그러므로 신청서를 사용할 이유가 없습니다. 즉

,

o.bind(arguments) 

여기

o.bind.apply(o, arguments) 

는 안 동일해야합니다? 왜 o.bind.apply (o, arguements)입니까?

답변

4

.apply배열 인수를 전달하므로 동일한 내용이 아닙니다. 다음을 고려하십시오.

function foo(a, b, c) { 
    console.log(a); 
    console.log(b); 
    console.log(c); 
} 

foo.apply(null, [1, 2, 3]); 
// Prints: 
// 1 
// 2 
// 3 

foo([1, 2, 3]); 
// Prints: 
// [1,2,3] 
// undefined 
// undefined 

.call과 혼동 될 수 있습니다. 이는 중복 될 수 있습니다.

1

bindapply 사이에 차이가 있습니다. Bind는 인수를 취하고 apply는 인수와 함께 범위와 배열을 가져옵니다.

더 명확하게하려면. 이것은 같을 것이다 :

o.bind(1,2,3); 

o.apply(o, [1,2,3]); 
+0

'o'는'.apply()'메소드를 가지고 있지 않으므로'o'는 함수가 아니다. ECMAScript'.bind()'를 생각해 본다면, 그것들은'.apply()'처럼 호출 컨텍스트를 취하고'.call()'과 같은 개별 인수를 취한다. –

관련 문제