**this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁**,**实际上this的最终指向的是那个调用它的对象** * 在方法中,this指的是所有者对象。 * 单独的情况下,this指的是全局对象。 * 在函数中,this指的是全局对象。 * 在函数中,严格模式下,this是 undefined。 * 在事件中,this指的是接收事件的元素。 像call()和apply()这样的方法可以将 this 引用到任何对象。 ~~~ function demo(){ var userName = "today"; console.log(this.userName); //undefined console.log(this); //Window } demo(); window.demo() ~~~ this最终指向的是调用它的对象,这里的函数a实际是被Window对象所点出来的 ~~~ var obj = { userName : "today"; fn:function(){ console.log(this.userName); //today } } obj.fn(); window.obj.fn() ~~~ 这里的this指向的是对象obj,因为你调用这个fn是通过obj.fn()执行的,那自然指向就是对象obj,这里再次强调一点,this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。 window是js中的全局对象,我们创建的变量实际上是给window添加属性,所以这里可以用window点obj对象。 ~~~ var obj = { a:10, b:{ a:12, fn:function(){ console.log(this.a); //undefined console.log(this); //window } } } var j = obj.b.fn; j(); ~~~ this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的,虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是window. ~~~ function fn() { this.userName : "today"; return {}; } var a = new fn; console.log(a.userName ); //undefined ~~~ 如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。 虽然null也是对象,但是在这里this还是指向那个函数的实例,因为null比较特殊。