如果你只是使用Ext做些小样子,那么你完全不必理会this(Ext的官方例子里面也基本上很少用这个关键字,因为这个原本在其他语言中非常简单的东西在Javascript却变得有时候让人难以捉摸);但是如果你想了解整个Ext框架或是编写可重用的js组件,你就不得不认识清楚这个关键字了。
要点:
[list]
[*][b][size=large]全局环境下this指向window对象[/size][/b]
[img]http://dl.iteye.com/upload/attachment/251306/e695f1e2-7d17-302a-b382-b7f8fcf88dbd.png[/img]
[*][b][size=large]这个函数做为谁的属性被调用,那么this就指向谁,不做为属性被调用时this指向window[/size][/b]
[img]http://dl.iteye.com/upload/attachment/251318/a1326a04-1cf4-3ebd-a71c-70bde92e638b.png[/img]
尽管b是在a函数中定义的,但它却不做为a的属性被调用(注释上说的不准确,实际上b函数是做为a函数的activation object的属性来调用的,这个对象只在运行时产生,运行完后销毁(闭包例外)我们在JS中是取不到的)
[img]http://dl.iteye.com/upload/attachment/251332/323fd3b9-de79-3a24-82fd-760a123b7303.png[/img]
JSON格式直接赋值的直接量对象,灰常简单
[*][b][size=large]函数做为特殊函数属性constructor使用时this指向生成的对象[/size][/b]
[img]http://dl.iteye.com/upload/attachment/251362/11db78f1-eb81-38e7-a4b9-ccac24bee22c.png[/img]
[*][b][size=large]调用函数对象的call或apply方法可以调用这个函数的同时改变this的的指向[/size][/b](call和apply方法的第一个参数是新的this指向对象,后面的参数都是执行函数对象所需要的参数)
[/list]
其实只要完全理解以上四点就可以解释所有this的指向问题了,Ext的一些方法不过是对一些常用的情况进行了封装罢了。
未完成...
要点:
[list]
[*][b][size=large]全局环境下this指向window对象[/size][/b]
[img]http://dl.iteye.com/upload/attachment/251306/e695f1e2-7d17-302a-b382-b7f8fcf88dbd.png[/img]
[*][b][size=large]这个函数做为谁的属性被调用,那么this就指向谁,不做为属性被调用时this指向window[/size][/b]
[img]http://dl.iteye.com/upload/attachment/251318/a1326a04-1cf4-3ebd-a71c-70bde92e638b.png[/img]
尽管b是在a函数中定义的,但它却不做为a的属性被调用(注释上说的不准确,实际上b函数是做为a函数的activation object的属性来调用的,这个对象只在运行时产生,运行完后销毁(闭包例外)我们在JS中是取不到的)
[img]http://dl.iteye.com/upload/attachment/251332/323fd3b9-de79-3a24-82fd-760a123b7303.png[/img]
JSON格式直接赋值的直接量对象,灰常简单
[*][b][size=large]函数做为特殊函数属性constructor使用时this指向生成的对象[/size][/b]
[img]http://dl.iteye.com/upload/attachment/251362/11db78f1-eb81-38e7-a4b9-ccac24bee22c.png[/img]
[*][b][size=large]调用函数对象的call或apply方法可以调用这个函数的同时改变this的的指向[/size][/b](call和apply方法的第一个参数是新的this指向对象,后面的参数都是执行函数对象所需要的参数)
[/list]
其实只要完全理解以上四点就可以解释所有this的指向问题了,Ext的一些方法不过是对一些常用的情况进行了封装罢了。
未完成...