2017-08-10 84 views
-1

使用对象文字和使用构造函数创建对象(理论上)以及何时使用它们之间的区别是什么?Object Literals - Vs - 构造函数

我不是指我们如何使用它们。我的意思是他们如何在幕后工作,以及他们的机制如何不同!

+0

有[许多重复](https://stackoverflow.com/search?q=%5Bjavascript%5D+literal+vs+constructor)。 – RobG

+0

我不是在说如何使用它们。我正在谈论当我使用他们两个时在js幕后发生的事情。我问我的问题,因为我发现没有其他问题是为了我要找的点... 所以我的问题不是重复的! –

+0

如果您想回答问题,则编辑该问题。 –

回答

1

基本上 - 在ES2015之前 - 使用对象文字创建对象时,您无法向对象添加方法。

由于ES2015的是可以添加的方法来反对文字,这使得对象文字和类声明八九不离十:

var obj = { 
    // __proto__ 
    __proto__: theProtoObj, 
    // Shorthand for ‘handler: handler’ 
    handler, 
    // Methods 
    toString() { 
    // Super calls 
    return 'd ' + super.toString(); 
    }, 
    // Computed (dynamic) property names 
    [ 'prop_' + (() => 42)() ]: 42 
}; 

另一个重要的事情是,当你想创建一个类的实例 - 你会想要基于该类声明创建类声明和初始化对象。

+0

很高兴指出ECMAScript 2015中引入的功能,大部分副本都有点旧。对象初始值设定项的附加功能也包含在[* MDN *](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer)中。尽管谨慎使用'__proto__',它是[* ECMA-262 *附录]中的扩展(http://ecma-international.org/ecma-262/8.0/#sec-__proto__-property-names-在-对象初始化)。 – RobG

相关问题