理解this
- JavaScript是词法作用域(或者说是静态作用域):作用域在函数定义的时候就有了
- this 是Javascript用来实现动态作用的一种方法,this的指向在函数执行的时候才会确定,谁调用了这个函数this就指向谁。
四种常用的this 指向
- 直接调用this--指向window。
- 对象方法调用
bar.foo()--指向调用该函数的对象,也就是bar。 - 用call和apply绑定:
foo.call(bar),foo.apply(bar), (二者的区别主要在传参上)。--指向绑定的对象。
这种情况下,绑定可以丢失,也就是可以重新绑定到其他对象。
- 使用bind(),可以解决绑定丢失的问题,也就是说该函数不能重新绑定到其他对象。
一些例子
- setTimeout: 要注意函数执行的时候才将this绑定到调用函数的对象。如果回调函数是对象的方法,那么setTimeout使得方法内部的this关键字指向全局环境,而不是定义时所在的那个对象。如下,可以将obj.y放入一个匿名函数解决,也可以使用bind
var x = 1; var obj = { x: 2, y: function () { console.log(this.x); } }; setTimeout(function () { obj.y(); }, 1000); // 2 - jQuery使用中: this指向的是DOM对象还是jQuery对象,注意
${this}的使用