javascript - 仅返回对象文字的构造函数如何工作?

标签 javascript constructor

当我调用以下两个构造函数时,它们的工作原理是相同的(据我所知):

var x2z = new xyz('ralph');

我是否编写这样的构造函数:

function xyz(name) {
    return {
        name: name,
        x:1,
        get y() {return this.x+1},
        get z() {return this.y+1}
    }
}

或者如果我已经声明了:

function xyz(name) {
    this.name = name;
    this.x = 1;
    Object.defineProperties(this, {
        "y": {"get": function() {return this.x+1}}
    }),
    Object.defineProperties(this, {
        "z": {"get": function() {return this.y+1}}
    })
}

第二种形式是随处可见的形式。但为什么第一个有效呢? new 关键字是否被忽略并返回对象文字?

两者有何关系?如果有人能给我指出一个引用资料,那就太好了;我可以在对象上找到很多东西,但我在第一个表单上没有找到任何东西。

我组装了一个简单的 jsperf,文字版本稍微快一些,但如果它只是一个奇怪的东西,还不足以使用它。 (jsperf example)。但它似乎比更常用的引用“this”的构造函数更简单。

最佳答案

MDN 有关于"new"的非常好的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

The object returned by the constructor function becomes the result of the whole new expression. If the constructor function doesn't explicitly return an object, the object created [initially] is used instead. (Normally constructors don't return a value, but they can choose to do so if they want to override the normal object creation process.)

关于javascript - 仅返回对象文字的构造函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27002576/

相关文章:

java - 如何在构造函数中用随机整数填充数组? (二维数组)

javascript - 空函数 "function(){}"在JS对象构造函数中如何工作?

c++ - 为什么 braced-init-list 在函数调用和构造函数调用中的行为不同?

javascript - 在 ReactJS 中设置输入时出错,标签覆盖/覆盖输入集的值,使用 material.ui

javascript - AWS SDK - getObject 将返回的文件从 ASCII 缓冲区转换为 gzip,然后转换为 csv

javascript - 英国电话号码的正则表达式 - 所有可能选项的变体

c++ - 如何在数组对象中传递参数?在 C++ 中

php - SCORM 包未与 LMS 通信

javascript - 为益智游戏隐藏 Javascript

java - 找不到符号编译器错误