머리말
컨텍스트 , 즉 함수가 실행될 때 컨텍스트를 변경하기 위해 모두 전화 및 적용이 존재합니다. 다시 말해, 기능 본문 내부의 방향을 변경하는 것입니다.
통화 및 적용 기능은 정확히 동일하지만 매개 변수를 수락하는 방법은 다릅니다.
메소드 정의
적용하다
Function.apply(obj,args) 메소드는 두 가지 매개 변수를받을 수 있습니다.
OBJ : 이 개체는 함수 클래스 에서이 개체를 대체합니다.
Args : 이것은 배열 또는 클래스 배열입니다. 적용 메소드는이 컬렉션의 요소를 호출 된 함수의 매개 변수로 전달합니다.
부르다
호출 메소드 의 첫 번째 매개 변수는 두 번째 매개 변수가 매개 변수 목록이라는 점을 제외하고 적용 메소드 와 동일합니다.
비 스트릭 모드에서는 첫 번째 매개 변수가 널 또는 정의되지 않은 것으로 전달되면 기능 본문에서 이것은 기본 호스트 객체를 가리키고 브라우저에서는 창입니다.
var test = function () {console.log (this === wind용법
다른 사람을 "납치"하는 방법
현재 FOO 의 LogName 메소드는 BAR 에 의해 참조됩니다.
var foo = {name : "mingming", logname : function () {console.log (this.name); }} var bar = {이름 : "xiaowang"}; foo.logname.call (bar); // xiaowang상속을 실현하십시오
기능 동물 (이름) {this.name = 이름; this.howname = function () {console.log (this.name); }} 함수 cat (name) {동물성 (this, name); } var cat = 새로운 고양이 ( "검은 고양이"); cat.howname (); // 검은 고양이실제 개발에서 이것은 실수로 변화하는 시나리오가 종종 발생합니다.
현지 재미 방법이 있습니다. 재미있는 기능이라고 불리면 이 내부의 재미는 창을 가리키지 만 #Test 노드를 가리키기를 원합니다. 다음 코드를 참조하십시오.
window.id = "window"; docum } fun (); // window}
통화를 사용하여 적용하면 이 문제를 쉽게 해결할 수 있습니다
window.id = "window"; docum } fun.call (this); // test}
물론이 작업을 수행 할 수는 있지만 ECMAScript 5 엄격한 모드에서는이 경우 글로벌 객체를 가리키지 않지만 정의되지 않은 것으로 지정되었습니다.
window.id = "window"; docum console.log (this.id); // test var fun = function () {console.log (that.id); } fun (); // test} function func () { "Strict"Alert (this); // output : undefined} func ();다른 사용법
클래스 배열
여기에서 다음 조건을 충족하는 객체를 클래스 어레이라고합니다.
1. 길이 속성이 있습니다
2. 인덱스에 따라 데이터를 저장하십시오
3. 푸시, 팝 및 배열이없는 기타 방법
일반적인 클래스 배열에는 논쟁과 노드리스트가 포함됩니다!
(function () {array.prototype.push.call (Arguments, 4); console.log (Arguments); // [1, 2, 3, 4]}) (1,2,3)이런 식으로 4를 인수 로 밀어 넣으십시오
Array.prototype.push 페이지는 두 배열의 조합을 구현할 수 있습니다.
푸시 방법은 푸시 어레이를 제공하지 않지만 푸시 (param1, param,… paramn)를 제공하므로 적용하여 배열을 설치하고 교체 할 수도 있습니다.
var arr1 = 새로운 배열 ( "1", "2", "3"); var arr2 = 새로운 배열 ( "4", "5", "6"); Array.prototype.push.Apply (ARR1, ARR2); Console.log (ARR1); // [ "1", "2", "3", "4", "5", "6"]]]
또한 이러한 방식으로 이해할 수 있습니다. ARR1은 푸시 메소드를 호출하며 매개 변수를 일련의 매개 변수 목록에 적용하여 매개 변수를 대체합니다.
예를 들어 클래스 배열에서 최대 값을 찾고 싶습니다.
(함수 () {var maxnum = math.max.apply (null, arguments); console.log (maxnum); // 56}) (34,2,56);판사 유형
console.log (object.prototype.toString.call (123)) // [Object Number] Console.log (Object.Call ( '123'))) // [Object String] console.log (Object.Prototype.toString.call (undefined)) // [object.proTOnt.call. // [Object Boolean] console.log (Object.prototype.tostring.call ({})) // [Object Object] Console.log (Object.Prototype.toString.call ([])) // [Object] Console.Log (Object.Prototype.toString.call ())))).위는 적용 및 전화 사용 요약의 전체 내용입니다. 모든 사람들은 토론에 참여하기 위해 메시지를 남겨 두는 것을 환영합니다. 또한이 기사가 JavaScript를 배우는 모든 사람에게 도움이되기를 바랍니다.