일부 jQuery 플러그인에서는 callback.call(xxx,xxx)과 같은 내용을 자주 볼 수 있습니다. 책에서 호출 및 적용 함수가 범위를 변경할 수 있다고 읽었지만 여전히 주요 목적을 완전히 이해할 수 없습니다. 어떤 문제가 해결되는지, 대안이 있는지 또는 이 두 기능이 주로 해결하려는 문제는 무엇인지, 응용 프로그램 시나리오는 언제 사용하는 것이 가장 적절한지 이런 코드를 읽을 때마다 현기증이 나고 선형 읽기에서 벗어나는 것이 약간 복잡한 느낌입니다
호출 및 적용 기능은 매우 간단합니다. 즉, 적용 가능한 시나리오가 너무 많습니다. 때로는 단지 "아름다움"을 위한 것일 수도 있지만, 제가 자주 사용하는 것은 다음과 같습니다.
1.
Obj의 유형을 결정하는 데 사용됩니다
인수는 Array와 비슷하지만 Array의 push 방식이 없습니다. 어떻게 해야 하나요?
Array.prototype.push.call(인수)
3.Javascript에는 private 메소드라는 개념이 없어서 클로저를 이용하여 구현하고 싶습니다
(function () { var Person = function () { this.doSomeThing = function () { _privateFunction.call(this); } } var _privateFunction = function () { } window.Person = Person; }).call(window);
콜백할 때 콜백의 컨텍스트를 현재 컨텍스트로 설정하려는 경우 call 또는 Apply를 사용할 수도 있습니다. 이점은 무엇인가요?
이때 콜백의 this는 현재 컨텍스트를 나타냅니다. 예를 들어 Person 클래스와 해당 메서드에는 콜백 매개변수가 있습니다. 이 콜백이 일반 대괄호를 통해 실행되는 경우 이 콜백에서 실행되는 person의 다른 메서드는 person.other를 사용하여 구현해야 하지만 이후에는 컨텍스트가 전환됩니다. 자, 이것으로 다 끝났습니다.other~ 코드 비교는 다음과 같습니다.
var Person = function(){ }; Person.prototype.say = function(callback){ callback(); }; Person.prototype.other = function(){ }; var vincent = new Person(); vincent.say(function(){ vincent.other(); });
사용된 통화:
var Person = function(){ }; Person.prototype.say = function(callback){ callback.call(this); }; Person.prototype.other = function(){ }; var vincent = new Person(); vincent.say(function(){ this.other(); });
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.