只要 new 表達式以後的 constructor 返回(return)一個引用對象(數組,對象,函數等),都將覆蓋new建立的匿名對象,若是返回(return)一個原始類型(無 return 時其實爲 return 原始類型 undefined),那麼就返回 new 建立的匿名對象。數組
情景一. new function(){}函數
var fn = new function() {return "圓心"}; alert(fn);
咱們運行情景一代碼,將返回顯示「[object object] 」,此時該代碼等價於: spa
function 匿名類(){ return "圓心"; } var fn = new 匿名類(); alert(fn);
也等價於:.net
var Fn = function() {return "圓心"}; var fn = new Fn(); alert(fn);
咱們對情景一的代碼進行下面改造: code
var fn = new function() {return new String("圓心")}; alert(fn);
咱們運行,將會發現返回的是「圓心」,這是爲何呢? htm
只要 new 表達式以後的 constructor 返回(return)一個引用對象(數組,對象,函數等),都將覆蓋new建立的匿名對象,若是返回(return)一個原始類型(無 return 時其實爲 return 原始類型 undefined),那麼就返回 new 建立的匿名對象對象
因爲 new String 會構造一個對象,而不是一個 string 直接量,且new String(x) 若是帶參數,那麼alert它的時候就會返回 x。因此 fn 將返回 new String(」圓心」) 這個對象,而 alert(fn) 則顯示 「圓心」。
blog
情景二. function(){}()
ip
var obj = function() {return "圓心"}(); alert(obj);
咱們運行情景二代碼,將返回顯示「圓心」,此時該代碼等價於: get
var 匿名函數 = function() {return "圓心"}; var obj = 匿名函數(); alert(obj);
很明顯,obj 返回的是匿名函數的執行結果值,即 obj 爲:「圓心」。
固然匿名函數的執行結果也能夠爲一個匿名對象。具體常見應用能夠看《Javascript的一種模塊模式》
【轉載】http://www.jb51.net/article/13895.htm