jQuery1.0源代码分析之jQuery构造函数(二)
我们接着上一篇jQuery源代码分析(一),继续看后面的代码。
jQuery的框架设计是很巧妙的,可能1.0和1.6.x的代码变化很大,但是基本原理是一样的,都是用javascript的prototype来实现继承,我们看下面的代码:
function jQuery(a,c) {
// 代码段1:这里省略若干代码行
// If the context is global, return a new object
if ( window == this )
return new jQuery(a,c);
// 代码段2:这里省略若干代码行
}
这里,我们省略掉了一些不重要的代码,函数jQuery就是入口函数。
大家知道,javascript的function即是函数又是类,当你new一个函数的时候,这个函数就变成了类的构造函数,函数内的this指向被new出来的实例。
而正常调用一个全局的函数,this是指向window变量的。
所以上面的代码就不难理解了。
第一次调用jQuery函数的时候,jQuery充当一个对象工厂,当遇到if (window == this) 马上new一个jQuery对象,再次调用jQuery,并把该对象返回。
第二次调用jQuery函数的时候,jQuery充当了构造函数,this指向了new出来的实例。
代码本身没什么问题,但是设计的有点不好,在代码段1的位置里,两次调用jQuery函数,this被分别指向了window和jQuery实例对象,这就有点不好了。所以代码段1里没有没有使用this,而代码段2里才使用this。
本着单一责任原则,一个函数应该只做一件事。所以后来版本的jQuery就把new对象这段代码,放到一个新的函数init里面去了。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>