本身對js認識仍是不夠...
http://www.gracecode.com/posts/1009.html
http://blog.sanjh.cn/new-function-yao-zhu-yi-wen-ti.htmljavascript
文章中的一句話一直不明白:
說明:
只要 new 表達式以後的 constructor 返回(return)一個引用對象(數組,對象,函數等),都將覆蓋new建立的匿名對象。
若是返回(return)一個原始類型(無 return 時其實爲 return 原始類型 undefined),那麼就返回 new 建立的匿名對象。html
後來燃燒腦細胞以後,得出的結論以下:java
var hello = new function() { return "hello, world!" }; alert(hello);
代碼執行應該是這樣的:數組
var hello = new (function() { return ("hello, world!")};) alert(hello);
對上面說明的理解應該是:閉包
若是返回(return)一個原始類型(無 return 時其實爲 return 原始類型 undefined),那麼就返回 new 建立的匿名對象。
構造器constructor中,返回的是一個原始類型(即"hello, world!"),則new表達式建立一個匿名對象,等同於var hello=new function(){/* something */}函數
var hello = new function() { return new String("abc"); }; alert(hello);
而代碼返回的是new String('abc')時,則返回了一個對象,那麼new String('abc')將會覆蓋整個new function(){/* */},即等同於var hello=new String("abc");
只要 new 表達式以後的 constructor 返回(return)一個引用對象(數組,對象,函數等),都將覆蓋new建立的匿名對象。post
析後的代碼變成:spa
var hello = new String("abc"); alert(hello);
2014/05/06 PS: 若是返回的是一個引用類型,那麼理解成閉包.就OK了code