如何修改this指向
- 1.call(执行环境对象,实参列表)
- 2.apply(执行环境对象,实参数组列表)
- 3.bind(执行环境对象,实际参数)()/(执行环境对象)(实际参数)
var obj = {
name: 'terry',
sayName: function () {
console.log(this,this.name);
}
}
var obj1 = {
name: 'larry',
sayName: function () {
console.log(this, this.name);
}
}
obj.sayName();
obj1.sayName();
使用node命令查看打印结果
1.call()
使用call()将this指向obj
var obj = {
name: 'terry',
sayName: function () {
console.log(this,this.name);
}
}
var obj1 = {
name: 'larry',
sayName: function (a,b) {
console.log(this, this.name,a,b);
}
}
// obj.sayName();
// obj1.sayName();
// 1.修改this指向 call()
obj1.sayName.call(obj, 1, 2)
node命令查看打印结果,发现修改this指向成功
2.apply()
apply()方法需要将实参以数组形式表达
// 2.apply()
obj1.sayName.apply(obj, [1, 2])
3.bind()
bind()方法有两种写法,可以将实参放在任意一个括号内,*括号不能省略
// 3.修改this指向 bind()()
// bind()返回当前函数本身 bind()()调用函数
obj1.sayName.bind(obj, 1, 2)(); // obj1.sayName.bind(obj)(1, 2);