学习jQuery源码遇到的问题

https://img4.mukewang.com/5c36e3b40001355f04440227.jpg

打印flase

https://img4.mukewang.com/5c36e3bd0001308104530222.jpg

打印Uncaught RangeError: Maximum call stack size exceeded

https://img1.mukewang.com/5c36e3c80001f92d04430263.jpg

正常执行,不会报错

我的问题是:既然if里面的语句永远都是false,为什么不报错?


尚方宝剑之说
浏览 490回答 1
1回答

繁花不似锦

怎么会永远是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(), 陷入循环了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript