普通函数:this指向的是window对象
function f1(){
console.log(this)
}
f1()
//输出是window对象
构造函数:this指向的是实例化对象,原型对象里面的方法也是指向实例化对象
function F1(){
console.log(this)
}
F1.prototype.run=function(){
console.log(this)
}
var f1 = new F1()
f1.run()
//输入结果都是F1{}这个对象,所以原型对象里面的方法也是指向实例化对象
事件绑定方法:this指向的是绑定事件的对象
<button>点击</button>
<script>
var btn = document.querySelector('button')
btn.onclick=function(){
console.log(this)
}
</script>
立即执行函数:他和普通函数一样,this指向的window
(function(){
console.log(this)
})()
//输出结果为window
call、apply、bind三者的异同
共同点 : 都可以改变this指向
不同点:
call 和 apply 会调用函数, 并且改变函数内部this指向.
call 和 apply传递的参数不一样,call传递参数使用逗号隔开,apply使用数组传递
bind 不会调用函数, 可以改变函数内部this指向.