对比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