this,this指向
this的多种用法
-
全局范围内
-
函数调用
-
作为对象方法的调用
-
call/apply/bind 的调用
-
作为构造函数调用
在全局范围内使用this ,它将指向全局对象(浏览器中为 window)
纯粹的函数调用,这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global
在事件中表示当前元素的时候,可以使用this
在html结构中的this,指向的绑定事件的元素本身
字面量对象中的this:指的就是对象本身
定时器中的this指向window
箭头函数中的this
-
箭头函数会捕获其所在上下文的 this 值,作为自己的 this 值,自己本身并没有this值;
-
箭头函数的this永远指向其上下文的this,任何方法都改变不了其指向,如call(), bind(), apply()。
call(),apply(),bind() 方法
所有函数都是对象,都有call(),apply(),bind()方法,都是为了改变this指向
call和apply相似,不同指出在于传递的方式不同,call的参数需要逐个列举,apply的参数需要通过数组的形式传递
function fun2(a,b){console.log(a+b);console.log(this);
}
box1.onclick = function(){fun2.call(this,10,20)
}
function fun(){console.log(this);
}
function fun2(a,b){console.log(a+b);console.log(this);
}
box1.onclick = function(){fun.apply(this)fun2.apply(this,[10,20])
}
bind有两个特点
-
不会调用函数
-
可以改变函数内部this指向
function fun2(a, b) {console.log(a + b);console.log(this);
}
box1.onclick = function () {// bind传參的格式和call是一样的,直接用逗号隔开var aa = fun2.bind(this,10,20)aa();
}