对象初始化:
var myObject = {};
和
var myObject = new Object();
为什么最后一个被认为是反模式?
感谢
答案 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 Object
,See 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);