<script>
/*
常用的改变函数this指向的代码有: call() apply() bind ()
语法:
call (参数1, 参数2, 参数3……) 参数1 : 要替换this 的值 参数2,3,4…… 是添加的参数
apply (参数1, [参数2, 参数3……]) 参数1 : 要替换this 的值 [参数2,3,4…… 是添加的参数]
bind (参数1, 参数2, 参数3……)() 参数1 : 要替换this 的值 参数2,3,4…… 是添加的参数
()最后需要二次调用
相同点
他们都可以改变this指向
不同点
apply的第二个参数是数组
bind 需要二次调用
*/
代码如下:
var obj = {
name: '李四',
say: function (a, b) {
console.log(this.name, a, b);
}
}
obj.say.call({ name: '张三' }, 'hello', 'world')// obj.say 函数中的 this 变成了 {name:'张三'}
obj.say.apply({ name: '张三' }, ['hello', 'world'])
obj.say.bind({ name: '张三' }, 'hello', 'world')();
var obj2 = {
name: '李四',
setname: function () {
obj.say.call(this); // 这里 this 指的是 obj2
// 继承了 obj 的属性 并调用了obj2 的name
}
}
// obj2.setname(); // 谁调用 this就是谁
</script>
改变this的指向最重要的是牢记他们的语法以及相同点和不同点