call() apply() bind()使用及区别
示例
var global_name = '小王';
var global_age = 18;
示例3
var person3={
name: '张三',
age: this.global_age,
myFun:function( height, salary){
console.log('姓名: '+this.name + ' 年龄: ' + this.age+' 身高: ' + height +' 薪资: '+ salary);
//张三 年龄 undefined 当前this指向person对象, 无global_age属性
}
}
var newPerson={
name:'李四',
age:88
}
//打印person3
person3.myFun(); //姓名: 张三 年龄: 18 身高: undefined 薪资: undefined
//call正常使用
person3.myFun.call(newPerson,'170','170元'); //姓名: 李四 年龄: 88 身高: 170 薪资: 170元
//call直接传入this 指向widnow, name为空字符串而非undefined, 因为每个window都已经定义了关键字name:'';
person3.myFun.call(this,'175','1750元'); //姓名: 年龄: undefined 身高: 175 薪资: 1750元
//apply 所有传入参数以数组[ ]传入
person3.myFun.apply(newPerson, ['180','1800元']); //姓名: 李四 年龄: 88 身高: 180 薪资: 1800元
//bind传入方式和call一样 但是bind函数执行后返回的是function,所以需要手动执行函数
person3.myFun.bind(newPerson,'190','1900元')(); //姓名: 李四 年龄: 88 身高: 190 薪资: 1900元