new function()隨筆

本身對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

相關文章
相關標籤/搜索