【问题标题】:Object Literals - Vs - Constructor Functions [duplicate]对象文字-Vs-构造函数[重复]
【发布时间】:2017-08-10 22:31:54
【问题描述】:

使用对象字面量和使用构造函数创建对象(理论上)以及何时使用它们有什么区别?

我不是说我们如何使用它们。我的意思是它们在幕后的工作方式以及它们的机制有何不同!

【问题讨论】:

  • 我不是在谈论如何使用它们。我说的是当我同时使用它们时,js 的幕后发生了什么。我问了我的问题,因为我发现没有其他问题与我正在寻找的问题有关......所以我的问题不是重复的!
  • 如果您愿意回答,该问题已被编辑。
  • ECMA-262 没有定义实现细节(即“幕后”发生的事情),因此在这里询问它们是题外话。您需要查看特定实现的代码以了解会发生什么。 ECMA-262 根据行为描述语言。初始化器和构造器之间的(相当小的)差异在副本中得到了很好的介绍。该规范根据等效的构造函数过程描述了processing of initializers,因此它们在理论上是相同的。 ;-)

标签: javascript oop object


【解决方案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
};

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

【讨论】:

  • 很高兴指出 ECMAScript 2015 中引入的功能,大多数重复项都有些旧。 MDN 还介绍了对象初始化器的附加功能。不过要小心使用__proto__,它是appendix to ECMA-262 中的一个扩展。
猜你喜欢
  • 2012-12-22
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多