區別 new function(){} 和 function(){}()

只要 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

相關文章
相關標籤/搜索