2011-03-04 33 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

相关问题