为了账号安全,请及时绑定邮箱和手机立即绑定

“新对象()”和“对象字面符号”有什么区别?

“新对象()”和“对象字面符号”有什么区别?

长风秋雁 2019-07-03 13:56:53
“新对象()”和“对象字面符号”有什么区别?用于创建对象的基于构造函数的语法有什么区别:person = new Object().这个字面语法:person = {     property1 : "Hello"};虽然JSLint更喜欢使用对象文字表示法,但两者似乎都在做相同的事情。哪个更好,为什么?
查看完整描述

3 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

他们都做同样的事情(除非有人做了不寻常的事情),除了你的第二个人创建一个对象向它添加一个属性。但是文字符号在源代码中占用的空间较少。对于正在发生的事情,它显然是可以识别的,所以使用new Object()实际上,您只是在输入更多的内容,并且(理论上,如果不是JavaScript引擎优化的话)执行一个不必要的函数调用。

这些

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 thisObject = 23;

在那极不寻常案件,new Object会失败但是{}会有用的。

在实践中,从来没有理由使用new Object而不是{}(除非你做了非常不寻常的事情)。


查看完整回答
反对 回复 2019-07-03
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

没有方法的简单对象没有区别,如您的示例所示。但是,当您开始向对象添加方法时,会有很大的不同。

字面方式:

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方法在对象的每个实例中。然而,通过原型方式,该方法在对象原型中定义,并在所有对象实例之间共享。如果您有很多对象或方法,那么字面方式会导致相当大的内存浪费。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 379 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信