this关键字
定义:this所指的是他的函数正在被谁的对象调用。
window
function fx() {
console.log(this);//window
}
fx()
这里的this所在的函数被第四行fx()调用,fx()是window的属性,所以这里this指的是window。
对象
var obj={
a:function fx() {
console.log(this);//obj对象
}
}
obj.a()
这里的this所在的函数被obj.a()调用,a是obj的属性,所以这里this指obj。
数组:
数组是特殊的对象所以数组也可以调用函数
var arr=[function fx() {console.log(this)},0,2,4]
arr[0]()
这里的this被数组arr[0]()调用,所以这里this指arr数组。
this的劫持
call
var obj1={
name:"karen",
say:function(){
console.log(this.name)//jack
}
}
var obj2={
name:"jack"
}
obj1.say.call(obj2)//让obj1.say运行 而且 内部的this设置为obj2
apply
function fn(a,b){
console.log(this,a,b,arguments)//["hello"] 80 90 [80,90,100]
}
fn.apply(["hello"]//指向该数据
,[80,90,100])//实参
bind
var name="1111"
var obj2={name:"jack"}
var obj3={name:"marry"}
var obj={
name:"karen",
say:function(){
console.log(this.name)//jack
}.bind(obj2)
}
var fn=obj.say
fn()
obj.say.call(obj3)
obj.say.apply(obj3)
fn.call(obj3)
只要调用该函数,函数中的this统统指向bind()中的数据。