首先了解js中this的指向,初学者可简单认为谁调用了,this就指向谁如
<button>点击</button>
<script>
document.querySelector('button').onclick = function(){
console.log(this); //this指向的是button
}
</script>
默认情况下的this指向为:
普通函数this指向为window
构造函数this指向实例对象
对象和方法中的this指向为当前实例对象
定时器this指向window
原型对象方法中的this指向实例对象
call()方法
call(参数1,参数2,参数3...)
其中参数1为this指向,而参数2,3以及之后为传入的实参
function Fun(val){
console.log(this); //String{'我是改变后的this指向'}
console.log(val); //我是实参1
}
var str = '我是改变后的this指向';
Fun.call(str,"我是实参1");
apply()方法
apply()用法与call类似,区别在于传参的方式不同apply的实参为数组形式
function Fun(val){
console.log(this); //String{'我是改变后的this指向'}
console.log(val); //我是实参apply1
}
var str = '我是改变后的this指向';
Fun.apply(str,["我是实参apply1"]);
bind()方法
bind方法与前两周区别为,bind方法更灵活容易控制,bind方法有返回值
function Fun(val){
console.log(this); //String{'我是改变后的this指向'}
console.log(val); //我是实参bind1
}
var str = '我是改变后的this指向';
var bind1 = Fun.bind(str,"我是实参bind1");
bind1();