“new Object()”和 object literal 表示法有什么区别?
2022-08-30 01:00:18
这种基于构造函数的语法用于创建对象之间有什么区别:
person = new Object()
...和此文字语法:
person = {
property1 : "Hello"
};
似乎两者都做同样的事情,尽管JSLint更喜欢使用对象文字表示法。
哪一个更好,为什么?
这种基于构造函数的语法用于创建对象之间有什么区别:
person = new Object()
...和此文字语法:
person = {
property1 : "Hello"
};
似乎两者都做同样的事情,尽管JSLint更喜欢使用对象文字表示法。
哪一个更好,为什么?
对于没有方法的简单对象,没有区别,如您的示例所示。但是,当您开始向对象添加方法时,会有很大的不同。
字面意思:
function Obj( prop ) {
return {
p : prop,
sayHello : function(){ alert(this.p); },
};
}
原型方式:
function Obj( prop ) {
this.p = prop;
}
Obj.prototype.sayHello = function(){alert(this.p);};
这两种方式都允许创建如下实例:Obj
var foo = new Obj( "hello" );
但是,使用字面方式,您可以在对象的每个实例中携带该方法的副本。然而,使用原型方式,该方法在对象原型中定义并在所有对象实例之间共享。如果您有很多对象或很多方法,那么字面上的方式可能会导致相当大的内存浪费。sayHello
它们都做同样的事情(除非有人做了一些不寻常的事情),除了你的第二个对象创建一个对象并向其添加一个属性。但文字表示法在源代码中占用的空间更少。很明显,对于正在发生的事情,这是可以清楚地识别的,所以使用,你实际上只是在打更多的字,并且(理论上,如果没有通过JavaScript引擎优化的话)做一个不必要的函数调用。new Object()
这些
person = new Object() /*You should put a semicolon here too.
It's not required, but it is good practice.*/
-or-
person = {
property1 : "Hello"
};
从技术上讲,不要做同样的事情。第一个只是创建一个对象。第二个创建一个并分配一个属性。要使第一个属性相同,则需要执行第二个步骤来创建和分配属性。
有人可以做的“不寻常的事情”是影子或分配给默认的全局变量:Object
// Don't do this
Object = 23;
在这种非常不寻常的情况下,将失败,但会起作用。new Object
{}
在实践中,从来没有理由使用而不是(除非你做了那件非常不寻常的事情)。new Object
{}