Javascript对象初始化,这是最好的方法吗?

时间:2010-12-25 12:07:21

标签: javascript oop object

对象初始化:

var myObject = {};

var myObject = new Object();

为什么最后一个被认为是反模式?

感谢

4 个答案:

答案 0 :(得分:7)

我不确定new Object()是否真的属于“反模式”,但{}通常是首选的,同时它更简洁,更灵活。

当你编写JavaScript时,你希望它最终简短...如果它在编写时也可以简洁易懂,那就是:

var myObject = { key: "value" };

...然后你将获得两全其美。此外,当您在对象中创建对象时,例如:

var myObject = { subObj: { key: "value" } };

...然后你可以看到 比其他new Object()语法更具可读性。

答案 1 :(得分:4)

你总是应该更喜欢文字而不是构造函数。

这与您的问题无关,但这是一个数组示例。如果您不知道它是如何工作的,new Array()乍一看会让人感到困惑:

var a = [5,6];
var b = [5];

都创建长度为2和1的数组。但请考虑

var a = new Array(5,6);
var b = new Array(5);

第一个创建一个长度为2的数组,包含元素5和6, 最后一个创建 5的数组。

所以你看,使用文字符号避免了这个陷阱。

除此之外,始终使用文字符号是一致的。创建字符串时,您还要编写var t = "Hello world"而不是var t = new String("Hello world")

答案 2 :(得分:1)

由于数组构造函数的问题,反模式很好,但仍然使用文字{}而不是对象new ObjectSee Google Javascript Guides中的构造函数。

答案 3 :(得分:0)

几乎总是,是的

我认为说“一个人应该总是喜欢这个”这样的事情有点过于笼统,总有例外。对象文字几乎总是首选,但是当您尝试克隆复杂的对象集时该怎么办?或者尝试实例化module

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}
newObject = Object.create(oldObject);