改变this指向的方法有:.bind()、call() 、apply()
- call()
window.color = 'red';
document.color = 'yellow';
var s1 = {color: 'blue'};
function changeColor () {
console.log(this.color);
}
changeColor.call() //不传参数默认指向window 输出:red
changeColor.call(window) //指向window 输出:red
changeColor.call(document) //指向document 输出:yellow
changeColor.call(this) //构造函数的this如果打括号调用默认指向window 输出:red
changeColor.call(s1) //指向s1对象 输出:blue
- apply()
window.number = 'one';
document.number = 'two';
var s1 = {number: 'three'};
function changeNum() {
console.log(this.number)
}
changeNum.apply(); //one
changeNum.apply(window); //one
changeNum.apply(document);//two
changeNum.apply(this);//one
changeNum.apply(s1);//three
- bind()
var obj = {
name: '123'
}
function fn() {
console.log(this.name)
}
var wuXiaoDi = fn.bind(obj)
console.log(fn) //function(){...}
wuXiaoDi() //123
区别:
bind与call和apply的区别:
返回值的区别:
bind的返回值是一个函数,而call和apply是立即调用。
参数使用的区别:
bind有返回值 返回值是调用bind方法的函数本身
call 没有返回值 他的第一个参数是要this的指向。第一个参数是谁,函数内部的this就指向谁其他参数以散落的形式传递给函数作为实参
apply 没有返回值 他的第一个参数是要this的指向。第一个参数是谁,函数内部的this就指向谁其他参数以数组的形式传递给函数作为实参