2011-03-04 35 views
0

以下示例是JavaScript中創建和操作對象的一種方式,即使用new Object()語法。另一種方法是創建一個對象文字。有沒有在JavasScript中使用`new Object()`的理由?

我記得在某處讀過,但現在找不到使用「new Object()」在JavaScript中創建對象的原因。

是否有理由使用new Object()如下面的代碼?

<html> 
    <head> 
     <title>Test Page</title> 
     <script type="text/javascript"> 
      window.onload = function() { 

       var layout = new Object(); 
       layout.idCode = 'simple'; 
       layout.title = 'Simple Layout'; 
       layout.content = ''; 
       layout.width = 400; 
       layout.display = function() { 
        return '<div style="background-color: #eee; width:'+this.width+'">'+this.content+'</div>' 
       }; 

       layout.width = 200; 
       layout.content = 'This is the new content'; 

       document.getElementById('output').innerHTML = layout.display(); 
      }; 
     </script> 
    </head> 
    <body> 
     <div id="output"></div> 
    </body> 
</html> 
+0

可能重複[是JavaScript的「新」關鍵字被認爲是有害的?](http://stackoverflow.com/questions/383402/is-javascript-s-new-keyword-considered-harmful) – 2011-03-04 13:23:08

+0

有沒有充分理由你不應該使用新的Object(),唯一的好處是通過使用{}來使用更少的代碼,那就是全部 – 2011-03-04 13:23:42

+0

@KIvanov實際上,更少的代碼是一個非常好的理由:) – 2011-03-04 13:26:56

回答

6

這只是有點難看。寫這個代替:

window.onload = function() { 

    var layout = { 
     idCode: 'simple', 
     title: 'Simple Layout', 
     content: '', 
     width: 400, 
     display: function() { 
      return '<div style="background-color: #eee; width:'+this.width+'">'+this.content+'</div>' 
     }, 

     width: 200, 
     content: 'This is the new content' 
    }; 
    document.getElementById('output').innerHTML = layout.display(); 
}; 

它做同樣的事情。

0

我無法想象這會造成什麼樣的問題,但如果你的錯誤,你總是可以:

var layout = {}; 

但沒有差別真的。

2

沒有,沒有任何理由,但是這是更簡單的(而當量):

var layout = { 
    idCode : 'simple', 
    title : 'Simple Layout', 
    content : '', 
    width : 400 
    // etc. 
} 
0

沒有區別,除了一個事實,即上面是可怕的代碼,絕不會讓它到代碼庫中,如果我必須查看提交。

11.1.5對象初始化劑

語義
生產ObjectLiteral:
1.返回通過表達式new Object作爲如果創建了一個新的對象(:{}如下評價)其中 對象是具有該名稱的標準內置 構造函數。

查看the spec瞭解更多無聊的細節。

PS:new Object()可能會稍快一些,但這完全依賴於JS引擎。這是一個FREAKING納米優化

+1

-1你沒有解釋*爲什麼*你認爲這太可怕了。你是否認爲它很醜,還是你有其他擔憂? – 2011-03-04 13:32:39

+0

不好意思,但我認爲現在文字和對象符號在所有可能的方式中都優於OP中的東西,這是*顯而易見的。但是,嘿,這是... ...不應該期待這麼多。 – 2011-03-04 16:26:53

+0

@Tomalak Geret'kal你寫'var temp = new String(「」)'或'var temp =「」'?'var temp = new Array(1)'或'var temp = []','var temp = new Number(0)'或'var temp = 0'。這東西是obvouis。 – Raynos 2011-03-04 16:37:12

相關問題