对比call,apply,bind

2021-09-08  本文已影响0人  9月的甜橙子
var name ='小王' ,age=12;
var obj={
  name: '小张',
  objAge: this.age,
  myFunc: function(){
    console.log(this.name +'年龄'+this.age);
  }
}

obj.objAge; // 12
obj.myFunc() // 小张年龄 undefined

小张年龄后面的那个this指向obj用于obj没有age关键字,所以undefined

var fav='小王';
function shows(){
  console.log(this.fav);
}

shows() // 小王

上面这段代码中,全局声明的函数shows()的this是window;

call()、apply()、bind()都是用来重定义this这个对象的

var name ='小王' ,age=12;
var obj={
  name: '小张',
  objAge: this.age,
  myFunc: function(){
    console.log(this.name +'年龄'+this.age);
  }
}
var db={
  name:'小李',
  age:99
}
obj.myFun.call(db);// 小李年龄 99
obj.myFun.apply(db);// 小李年龄 99
obj.myFun.bind(db)();// 小李年龄 99

传参的情况下

obj.myFun.call(db,'成都','上海');     // 小李 年龄 99  来自 成都去往上海
obj.myFun.apply(db,['成都','上海']);      // 小李 年龄 99  来自 成都去往上海  
obj.myFun.bind(db,'成都','上海')();       // 小李 年龄 99  来自 成都去往上海
obj.myFun.bind(db,['成都','上海'])();   // 小李 年龄 99  来自 成都, 上海去往 undefined

reference to https://www.runoob.com/w3cnote/js-call-apply-bind.html


如果本文对您有帮助,请给我点赞哦~ 谢谢~

上一篇下一篇

猜你喜欢

热点阅读