weibo_自1由9之9翼0_0
2015-10-08 22:12
if (!(
this instanceof aQuery
)) {return new aQuery(selector);} 这段代码没看明白,怎么 个厉害法呢
?
在当前示例代码下,每次调用aQuery实际上是运行了两遍aQuery函数。过程如下:
首先是用户手动调用aQuery这个函数,比如aQuery('#book'), 这时候进入aQuery函数,因为没有用new方式调用,所以函数内部this指代的是window,所以这时候会进入if语句中,重新通过new方式调用aQuery函数。第二次进入aQuery函数内部,这时候因为有new关键字,所以this就是指代aQuery实例化对象。
这种方式的好处就是当用户忘记使用new来调用的时候,程序也能自动调用new。
我是这样理解的,比如说你第一次使用aquery('#first-div'),因为if判断不是aquery就使用new实例化一个对象,当你第二次调用aquery('#first-div')时,为了减少内存资源以及cpu的浪费,这里就不再实例化了,即不再创建新的对象了。
alert(1)
构造一个作用域安全的构造函数 防止用户没有this绑定的全局对象中去
this 指向当前所正在使用的对象
aQuery 是一个构造函数
Js中instanceof 运算符是返回一个 Boolean 值,指出对象是否是特定构造函数的一个实例。
而javascript的继承是基于原型。故此处 instanceof 运算符 判断 this对象的原型链上是否有构造函数aQuery。
不存在的话,重新获取一个实例返回。
jQuery源码解析(架构与依赖模块)
84049 学习 · 280 问题
相似问题