《jQuery技術(shù)內(nèi)幕》一書中關于構(gòu)造函數(shù)返回值里的一句話如何理解?
網(wǎng)友解答: 首先要說明的是,測試的是沒有問題的,只是在書中描述不夠詳細導致了誤導;而我認為真正的描述應該是:“如果構(gòu)造函數(shù)有顯式返回一個對象,運算符new所創(chuàng)建的對象會被丟棄,返回值將作
首先要說明的是,測試的是沒有問題的,只是在書中描述不夠詳細導致了誤導;而我認為真正的描述應該是:“如果構(gòu)造函數(shù)有顯式返回一個對象,運算符new所創(chuàng)建的對象會被丟棄,返回值將作為new表達式的值”;
如果要真正的理解原因,首先我們得知道在js中,new到底是干什么用的,在背后又具體做了什么?
概念:new 運算符創(chuàng)建一個用戶定義的對象類型的實例或具有構(gòu)造函數(shù)的內(nèi)置對象的實例。
那么,當使用new創(chuàng)建對象時,發(fā)生了什么事情呢?以new Foo(...)為例:
1、一個繼承自Foo.prototype 的新對象被創(chuàng)建;
2、使用指定參數(shù)調(diào)用構(gòu)造函數(shù)Foo;并將this綁定到新創(chuàng)建的對象
3、由構(gòu)造函數(shù)返回的對象就是 new 表達式的結(jié)果。如果構(gòu)造函數(shù)沒有顯式返回一個對象,則使用步驟1創(chuàng)建的對象。一般情況下,構(gòu)造函數(shù)不會返回值,但是開發(fā)人員也可以主動返回一個對象去覆蓋正常默認創(chuàng)建的對象;
所以,由上,我們可以簡單猜測new運算符的運行如下函數(shù):
所以,綜上,書中描述應該是當構(gòu)造函數(shù)返回對象時,如,對象、數(shù)組、函數(shù)等只要滿足_return instanceof Object為true的,都會進行覆蓋;