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

来源:1-6 jQuery的类数组对象结构

weibo_自1由9之9翼0_0

2015-10-08 22:12

if (!(

this instanceof aQuery

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


写回答 关注

5回答

  • 慕无忌2114720
    2019-06-29 10:59:26

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

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

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

  • 慕尼黑3821393
    2016-11-06 10:33:38

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

  • 慕粉3150831
    2016-09-23 20:07:17

    alert(1)


  • 会飞的鸵
    2015-12-09 22:15:53

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

  • pardon110
    2015-10-16 09:27:29

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

    aQuery 是一个构造函数

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

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

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

    proto

    简单点解释是不是就是绑定好this的指向防止它指到全局作用域中去

    2015-12-13 11:55:07

    共 1 条回复 >

jQuery源码解析(架构与依赖模块)

由浅入深地剖析jQuery库的设计与实现,揭开框架背后的秘密

84049 学习 · 280 问题

查看课程

相似问题