gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 19:31:55 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com