Javascript进阶
2010-09-14 13:44:42 来源:WEB开发网如果大家对上述代码中this与闭包的用法有疑惑的话,可以继续往下看。
讲到这里就不得不提及JavaScript的作用域(scope)。所有的JavaScript代码都是在一个执行环境中被执行,有自己的作用域。这部分内容相对来说比较复杂,读者有兴趣可以详细参考<Javascript 闭包>。
JavaScript中的this就是被调用对象的引用。形象的说,是当前执行环境的上下文对象;简单的说,就是函数的拥有者Owner(这点对理解Event Handling很重要)。
闭包并不是JavaScript特有的概念,Martin Fowler早些年就发表了一篇关于闭包的文章(中文版)。
闭包是具有闭合作用域 的匿名函数。简单来说就是在function内定义的function,內部的function可以存取外部function內定义的变量。
现在来看看上面说的那个例子:
1、定义了一个jx对象,由于是作为Ajax使用的,所以它提供的一些属性都是为了自定义参数使用的。
2、我们关注它的load方法:
this.init(); // 对XMLHttpRequest对象进行初始化
var ths = this; // 在这里把jx对象本身保存到ths中是为了onreadystatechange函数中可以正确使用到jx对象中的属性(否则onreadystatechange内部的this指向的是http对象而不是我们要使用的jx对象)。
this.http.onreadystatechange = function () {
if(!ths) return;
var http = ths.http;
if (ths.indicator)ths.indicator.style.display='';
if (http.readyState == 4) {//4 = document loaded.
if (ths.indicator)ths.indicator.style.display='none';
if(http.status == 200||http.status==0) {
......
if(ths.callback) ths.callback(result); // process
}
......
}
}
Tags:Javascript 进阶
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接