有没有理由不在Javascript中使用`new Object()`?

时间:2011-03-04 13:19:27

标签: javascript

以下示例是JavaScript中用于创建和操作对象的一种方法,即使用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>

4 个答案:

答案 0 :(得分: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();
};

做同样的事情。

答案 1 :(得分:2)

不,没有理由,但这更简单(同等):

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

答案 2 :(得分:0)

我无法想象这会导致任何问题,但如果它让你烦恼,你可以随时:

var layout = {};

但确实没有区别。

答案 3 :(得分:0)

除了以上是可怕的代码之外没有区别,如果我不得不查看提交,它将永远不会进入代码库。

  

11.1.5对象初始化

     

<强>语义
  生产ObjectLiteral:{}的评估如下:
  1.返回一个新对象,就像通过表达式new Object()一样创建   对象是内置的标准   具有该名称的构造函数。

有关更多无聊的详细信息,请参阅the spec

PS:new Object()可能会快一点,但这完全取决于JS引擎。这是 FREAKING纳米优化