gpt4 book ai didi

javascript - 使用变量参数创建新的 Javascript 对象

转载 作者:行者123 更新时间:2023-11-28 15:12:07 25 4
gpt4 key购买 nike

我有类Foo,并且想要创建一个函数FooPrime,它相当于使用传递给的参数调用new Foo() FooPrime;

换句话说,如果我这样做:

FooPrime(1, 2, 3);

它应该与调用相同:

new Foo(1, 2, 3)

通常我会使用 callapply 来完成这类事情,并且使用 apply 可以获得几乎相同的效果:

var FooPrime = function() {
return Foo.apply({}, arguments);
}

但是:

Foo.apply({}, [1, 2, 3]);

与调用不完全相同:

new Foo(1, 2, 3)

所以我的问题是,有没有办法创建一个函数,它的功能与 new 完全相同,并且具有任意数量的参数?

最佳答案

在 ECMAScript 5 中,您可以填充 [[Construct]]像这样的东西:

function isObject(o) {
return Object(o) === o;
}
function construct(F, args) {
var obj = isObject(F.prototype) ? Object.create(Foo.prototype) : {},
res = Function.prototype.apply.call(F, obj, args);
return isObject(res) ? res : obj;
}
var FooPrime = function() {
return construct(Foo, arguments);
}

ECMAScript 6 提供了更简单、更可靠的Reflect.construct

var FooPrime = function() {
return Reflect.construct(Foo, arguments);
}

或者您也可以使用spread operator ,它比 Reflect 拥有更多的浏览器支持。

var FooPrime = function() {
return new Foo(...arguments);
}

关于javascript - 使用变量参数创建新的 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35978470/

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