자바스크립트 호출 및 적용 키워드의 역할
적용은 두 개의 매개변수를 허용합니다. 첫 번째 매개변수는 함수 본문의 this 객체에 대한 포인터를 지정하고, 두 번째 매개변수는 첨자가 포함된 컬렉션입니다.
call은 적용을 위한 구문 설탕입니다. 매개변수 개수가 고정된 경우 세트를 첨자 없이 두 번째 매개변수로 전달할 수 있습니다.
var func = function(a,b,c) { alert(a + b + c); } func.apply(null,[1,2,3]);//弹出6 func.call(null,1,2,3);//弹出6
적용 및 호출에 전달된 첫 번째 매개변수가 null인 경우 함수 본문의 this는 창을 가리킵니다.
적용 및 호출에 전달된 첫 번째 매개변수가 null인 경우 함수 본문의 이 매개변수는 창을 가리킵니다.
전화 및 신청의 용도
1. 이
var obj1 = { name = '刘备' } var obj2 = { name = '曹操' } var getName = function(){ alert(this.name); } window.name = '三国'; getName();//弹出"三国" getName.call(obj1);//弹出"刘备" getName.call(obj2);//弹出"曹操"
그래서 어떤 때는 상황 이 점이 설명할 수 없을 정도로 변경된 후에는 전화나 신청을 사용하여 이 점을 수정할 수 있습니다.
document.getElementById('div1').onclick = function(){ alert(this.id);//div1 var fun1 = function(){ alert(this.id);//window.id 即undefined } fun1();//普通函数的方式调用,this指代window,相当于window.id 即 undefined }
일반 함수라고 하기 때문에 위의 예에서는 window가 되었습니다. 통화를 사용하여 수정하는 방법을 살펴보겠습니다.
document.getElementById('div1').onclick = function(){ alert(this.id); var fun1 = function(){ alert(this.id); } fun1.call(this);//强制函数内的this为外层的this, }
2. 다른 객체의 함수 호출
예 1:
var obj1 = { a:1, b:2, add:function() { return this.a + this.b; } } var obj2 = { a:1, b:2, } var result = obj1.add.call(obj2);//用obj1的函数来计算obj2的两个属性的和 alert(result);//输出3
예 2: 상속과 유사한 효과를 얻기 위해 생성자를 빌려옴
var A = function(name) { this.name = name; }; var B = function(){ A.apply(this,arguments) } B.prototype.getName = function(){ return this.name; } var b = new B('刘备'); alert(b.getName());