为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要做this instanceof aQuery这个判断呢?

if (!(

this instanceof aQuery

)) {return new aQuery(selector);} 这段代码没看明白,怎么 个厉害法呢


正在回答

6 回答

在当前示例代码下,每次调用aQuery实际上是运行了两遍aQuery函数。过程如下:

首先是用户手动调用aQuery这个函数,比如aQuery('#book'), 这时候进入aQuery函数,因为没有用new方式调用,所以函数内部this指代的是window,所以这时候会进入if语句中,重新通过new方式调用aQuery函数。第二次进入aQuery函数内部,这时候因为有new关键字,所以this就是指代aQuery实例化对象。

这种方式的好处就是当用户忘记使用new来调用的时候,程序也能自动调用new。

1 回复 有任何疑惑可以回复我~

我是这样理解的,比如说你第一次使用aquery('#first-div'),因为if判断不是aquery就使用new实例化一个对象,当你第二次调用aquery('#first-div')时,为了减少内存资源以及cpu的浪费,这里就不再实例化了,即不再创建新的对象了。

2 回复 有任何疑惑可以回复我~

alert(1)


0 回复 有任何疑惑可以回复我~

构造一个作用域安全的构造函数   防止用户没有this绑定的全局对象中去

2 回复 有任何疑惑可以回复我~

this 指向当前所正在使用的对象

aQuery 是一个构造函数

Js中instanceof 运算符是返回一个 Boolean 值,指出对象是否是特定构造函数的一个实例。

而javascript的继承是基于原型。故此处 instanceof  运算符  判断 this对象的原型链上是否有构造函数aQuery。

不存在的话,重新获取一个实例返回。

0 回复 有任何疑惑可以回复我~
#1

proto

简单点解释是不是就是绑定好this的指向防止它指到全局作用域中去
2015-12-13 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么要做this instanceof aQuery这个判断呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信