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

学习jQuery源码遇到的问题

学习jQuery源码遇到的问题

尚方宝剑之说 2018-12-19 18:19:56
打印flase打印Uncaught RangeError: Maximum call stack size exceeded正常执行,不会报错我的问题是:既然if里面的语句永远都是false,为什么不报错?
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

怎么会永远是false呢? 你这里三段js,最后一段if之前先console一下就看出端倪了。

你这里声明的aquery是一个function,当你调用aquery('#box'),首先 里面的this自然不是aquery的实例,所以false,于是return new aquery();

于是又再一次调用aquery了, 但这次,aquery是作为一个构造函数来调用的(注意到new),那么其this就是指向aquery的实例,这个时候if语句可就不是false了。于是执行后面那堆逻辑代码。

其实,这种写法就是简化每次实例化一个“类”都要new的麻烦。

至于第二段,为什么会报错呢?因为aquery作为一个普通函数或者构造函数,都是return new aquery(), 陷入循环了


查看完整回答
反对 回复 2019-01-10
  • 1 回答
  • 0 关注
  • 489 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信