尚方寶劍之說
2018-12-19 18:19:56
打印flase打印Uncaught RangeError: Maximum call stack size exceeded正常執(zhí)行,不會(huì)報(bào)錯(cuò)我的問題是:既然if里面的語句永遠(yuǎn)都是false,為什么不報(bào)錯(cuò)?
1 回答

繁花不似錦
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
怎么會(huì)永遠(yuǎn)是false呢? 你這里三段js,最后一段if之前先console一下就看出端倪了。
你這里聲明的aquery是一個(gè)function,當(dāng)你調(diào)用aquery('#box')
,首先 里面的this自然不是aquery的實(shí)例,所以false,于是return new aquery();
于是又再一次調(diào)用aquery了, 但這次,aquery是作為一個(gè)構(gòu)造函數(shù)來調(diào)用的(注意到new),那么其this就是指向aquery的實(shí)例,這個(gè)時(shí)候if語句可就不是false了。于是執(zhí)行后面那堆邏輯代碼。
其實(shí),這種寫法就是簡(jiǎn)化每次實(shí)例化一個(gè)“類”都要new的麻煩。
至于第二段,為什么會(huì)報(bào)錯(cuò)呢?因?yàn)閍query作為一個(gè)普通函數(shù)或者構(gòu)造函數(shù),都是return new aquery()
, 陷入循環(huán)了
添加回答
舉報(bào)
0/150
提交
取消