call, apply,bind 원리, 구별 및 원생 js 시뮬레이션.

2428 단어
Function의 prototype 원형에는 Function 실례의 공통된 방법이 저장되어 있다.A.Function의 원형은 다른 클래스와 같지 않습니다(Array, Object...)의 원형은 같은 대상입니다. Fuction의 원형은 빈 함수로 실행할 수 있습니다. undefined, Function을 되돌려줍니다.prototype();그러나 이것은 하나의 객체로서 자신의 속성 방법을 가지는 데 영향을 주지 않는다. B.Function 클래스는 Function의 실례이기도 하기 때문에 __proto__속성, 이 속성은 자신의 원형을 가리킨다
1.call 방법.모든 함수는call 방법을 호출하여 현재 이 함수가 실행하는this 키워드를 바꾸고 매개 변수를 지원합니다.우리는 원생 js 시뮬레이션 콜 방법으로 그것을 더욱 깊이 있게 이해한다.a. 첫 번째 매개 변수는call방법을 호출하는 함수 중의this가 b를 가리킨다. 두 번째 및 이후의 매개 변수는call방법을 호출하는 함수에 전송되는 매개 변수 c. 이 함수를 실행하면call방법이 되돌아오는 결과는 그의 함수를 호출하여 되돌아오는 결과 d.this를 삭제한다.
Function.prototype.mycall = function(context){
    context = context || window;
    context.fn = this;
    var arr = [];
    for(var i = 1;i

2. apply와call 방법은 유사합니다. 작용은 현재 함수 실행의this 방향을 바꾸고 함수를 실행하는 것입니다.유일한 차이점은 콜 방법이 현재 함수에 대한 매개체이다.apply는 수조 방식으로 매개 변수를 전송합니다
Function.prototype.myApply =function(context,arr){
context = Object(context) || window;
context.fn = this;
var result;
if(!arr){
    result= context.fn();
}else{
    var args = [];
    for(var i=0;i

3. bind 방법은 현재 bind 방법을 호출하는 함수this의 방향을 바꾸는 것이지만 현재 함수를 즉시 실행하지 않고 새로운 함수를 되돌려줍니다.또한 새로운 함수에 매개 변수를 전송하여 실행하기 전에 bind 방법을 호출하는 함수 실행을 지원하고 매개 변수를 투과합니다.bind 방법은 고급 함수의 일종이다.
Function.prototype.myBind = function(){
var context = arguments[0];
var self = this;
return function (){
    self.myApply(context,arguments)
}
};
var j = {name:1};
var k = [123]
function drink (k){
    console.log(this.name,k);
}
var fn = drink.myBind(j);
fn(k);


원생call,apply,bind방법을 실현하는 중점: 1.this 지향 변경: 함수 실행, 점.앞에는 누구,this는 누구의 원리가this지향을 바꾼다.매개 변수 투과: eval을 통해 문자열을 js 문법으로 바꾸어 실행합니다.3. bind 방법은 함수를 되돌려주고 되돌려주는 함수가 실행되며 역할역에서context 대상을 찾습니다.그리고 원형 체인을 통해 응용 프로그램 호출 방법 찾기
call, apply,bind는 같고 차이는 같습니다: 함수 실행을 바꿀 수 있는this는 다른 방향을 가리킵니다:callapply는 즉시 실행합니다bind는 실행하지 않습니다
call 전참은 하나하나 전입되고, apply는 수조 형식으로 전입됩니다.

좋은 웹페이지 즐겨찾기