关于this对象,有一点一定要记住:this对象是在运行时基于函数的执行环境绑定。
明白这个就好说了。。
看如下代码
明白这个就好说了。。
看如下代码
| 1 2 3 4 5 6 7 8 9 10 | varname='this is windows'; varobj={ name:'this is obj', getname:function(){ returnfunction(){ returnthis.name; } } } alert(obj.getname()()) |
弹出 this is windows;
obj.getname()执行返回的是一个 函数,两个括号就是要执行返回的函数。因为该函数是在windows作用域中执行的,
所以 这个this对象 指向的是windows作用域 而非 obj的作用域
再看
obj.getname()执行返回的是一个 函数,两个括号就是要执行返回的函数。因为该函数是在windows作用域中执行的,
所以 这个this对象 指向的是windows作用域 而非 obj的作用域
再看
| 1 2 3 4 5 6 7 | varname='this is windows'; varobj={ name:'this is obj', getname:(function(){ alert(this.name) })() } |
同样 该代码 弹出 this is windows;
因为 getname函数会在页面加载的时候就执行,
而执行环境是在windows下执行的,所以this 指向的就是windows作用域。
千万不要理解为 写在obj体里就认为this对象肯定指向obj体。。这是错误的。。
this对象是在运行时基于函数的执行环境绑定。
因为 getname函数会在页面加载的时候就执行,
而执行环境是在windows下执行的,所以this 指向的就是windows作用域。
千万不要理解为 写在obj体里就认为this对象肯定指向obj体。。这是错误的。。
this对象是在运行时基于函数的执行环境绑定。