资源描述:
《Javascript的this关键字使用方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Javascript的this关键字使用方法Javascriptthis关键字一般来说大家并不陌生,但是如何更好的用好Javascriptthis关键字却需要我们仔细思考,希望本文对广大程序员有所帮助。摘要本系列博文主要谈一些在Javascript使用中经常会混淆的高级应用,包括:prototype,closure,scope,this关键字.对于一个需要提高自己Javascript水平的程序员,这些都是必须要掌握的.本节主要介绍this关键字和scope.本文的Javascript源代码从这儿下载.Contents摘要引入this关键字关于
2、apply和callscope详述一些说明结论后记参考资料本文的源码引入作为一个程序员,你可能早已经习惯于面向对象语言中指代当前对象的引用(或者指针),如的c++中的this或者python中的self,当然具有OO属性(Javascript其实更多的是一种所谓的函数式语言)的Javascript同样,它也具有引用当前属性的对象的指针(或者引用),也就是this关键字.为了理解this关键字,如果你只想记住一句话,那应该是this关键字总是指向当前函数的所有者对象(执行空间),至于这句话如何理解,可以参见下面的详细说明.那么什么是scope呢
3、?wikipedia中的解释是Incomputerprogramming,scopeisanenclosingcontextwherevaluesandexpressionsareassociated.中文即是所谓的作用域,它指明的是一个数值或者表达式所关联的上下文(能够被引用的执行空间).scope与this有什么关系呢?如果从上面的定义来看,this指向的总是当前引用此函数的对象,而当你要判断当前引用的对象时,这时你就得弄清楚当前函数所在的scope.具体可见下面的分析.Javascriptthis关键字请看下面的几个例子.一个pytho
4、n的例子:1.class Person(object): 2."""a person class 3. """ 4.def __init__(self, name): 5.self.name = name #这里的self指向的是实例化后的对象,如下面中的zhutao 6.def get_name(self): 7.return self.name 8.zhutao = Person("zhutao") 9.print zhutao.name 10.一个 Javascript 的例子: 11. 12.window.name = "
5、zhutao from window" 13.var get_name = function(){ 14.return this.name; // this的具体指向只能在运行时才能确定,也就是确定运行时调用其的对象 15.}; 16.alert(get_name()); // 输出zhutao from window, get_name调用的对象为window 17.var obj = {} 18.obj.name = "zhutao from obj"; 19.alert(get_name.apply(obj)); // 输出zhu
6、tao from obj, 我们强制地使用了 apply来更改调用的对象,使其指向obj 20.var innerobj = { 21."name" : "zhutao from innerobj" 22.}; 23.innerobj.get_name = get_name; // 使得innerobj的get_name方法指向了global scope的get_name函数 24.alert(innerobj.get_name()); // 输出zhutao from innerobj, 此时this指向的是innerobj 那么从上面
7、的简单例子来看,this总是在运行时才能确定其具体的指向,也才能知道它的调用对象.而这点也正是动态语言一个重要特性.那么如何确定当前this指向的引用对象呢?通常可以这样判断:如果在global的scope(可以参见下面的说明来明确什么是globalscope)来调用,则指向的是bowser的顶级对象window例如:get_name()如果,有类似于这样的引用,innerobj.get_name()则很显然this指向的是innerobj如果我们使用了apply,call来进行强制的引用对象指向,则也会很显然地指向强制的对象,如get_na
8、me.apply(obj).关于apply和call这2个关键字可以很简单地理解为进行this引用对象(运行空间)强制转换,二者的语法如下:1.fun.call(o