JS call apply bind

call apply bind

box.onclick = function(){
  function fn(){
    alert(this);
  }
  fn();  //window.fn()  this指向window
};

1 我们原本以为这里面的this指向的是box,然而却是Window。一般我们这样解决:
box.onclick = function(){
  var _this = this;  //box
  function fn(){
    alert(_this);
  }
  fn();
};

2 使用call, call立即执行
box.onclick = function(){
  function fn(){
    alert(this);
  }
  fn.call(this)  //call(this)=call(box)  call立即执行类似fn()
};

3 使用apply, apply立即执行
box.onclick = function(){
  function fn(){
    alert(this);
  }
  fn.apply(this)  //apply(this)=apply(box)  apply立即执行类似fn()
};

4 call与apply区别,传参时call挨个传, apply使用[]传
function fn(a,b,c,d){  
  console.log(a,b,c,d);  
}
fn.call(null,1,2,3);
fn.apply(null,[1,2,3]);


5 bind调用该函数时才执行, 传参挨个传  
var f = fn.bind(null,1,2,3);  
f(4);

var objName = {name:'JS2016'};  
var obj = {  
 name:'0 _ 0',  
 sayHello:function(){  
 console.log(this.name);  
 }.bind(objName)  //不能立即执行
};  
obj.sayHello();//JS2016
posted @ 2022-02-23 23:10  波吉国王  阅读(22)  评论(0编辑  收藏  举报