面向对象语言中this表示当前对象的一个引用
1.在方法中,this表示该方法所属的对象
2.在函数中,函数的所属者默认绑定到this下;在严格模式下,this是未定义的(undefined)
3.在事件中,this表示接收事件的元素
4.如果单独使用,this表示全局对象
5.对象方法中绑定,this是定义的对象,是函数的所有者
5.call()和apply()方法可以将this引用到任何对象,改变this的指向
单独使用this
在浏览器中,window就是该全局对象
this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的,例子4中虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是
var o = { a:10, b:{ // a:12, fn:function(){ console.log(this.a); //undefined } } } o.b.fn();
var o = { a:10, b:{ a:12, fn:function(){ console.log(this.a); //undefined console.log(this); //window } } } var j = o.b.fn; j();
new操作符会改变函数this的指向问题
new关键字会创建一个空的对象,然后会自动经过一些操作(例如调用一个函数apply方法),将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。
function fn(){ this.num = 1; } var a = new fn(); console.log(a.num); //1
下方例子函数体内部使用了this
关键字。很多教科书会告诉你,this
指的是函数运行时所在的环境。对于obj.foo()
来说,foo
运行在obj
环境,所以this
指向obj
;对于foo()
来说,foo
运行在全局环境,所以this
指向全局环境
var obj = { foo: function () { console.log(this.bar) }, bar: 1 }; var foo = obj.foo; var bar = 2; obj.foo() // 1 foo() // 2
参考:http://www.ruanyifeng.com/blog/2018/06/javascript-this.html