使用变量参数创建新的Javascript对象
我有一个类使用变量参数创建新的Javascript对象,javascript,Javascript,我有一个类Foo,想创建一个函数FooPrime,它相当于调用newfoo(),并将参数传递给FooPrime 换句话说,如果我这样做: FooPrime(1, 2, 3); 它应该与调用以下对象相同: new Foo(1, 2, 3) 通常我会使用call或apply来处理这类事情,我可以使用apply获得几乎相同的效果: var FooPrime = function() { return Foo.apply({}, arguments); } 然而: Foo.apply({}
Foo
,想创建一个函数FooPrime
,它相当于调用newfoo()
,并将参数传递给FooPrime
换句话说,如果我这样做:
FooPrime(1, 2, 3);
它应该与调用以下对象相同:
new Foo(1, 2, 3)
通常我会使用call
或apply
来处理这类事情,我可以使用apply获得几乎相同的效果:
var FooPrime = function() {
return Foo.apply({}, arguments);
}
然而:
Foo.apply({}, [1, 2, 3]);
与调用不完全相同:
new Foo(1, 2, 3)
因此,我的问题是,有没有办法制作一个与
new
功能完全相同的函数,并且具有任意数量的参数?在ECMAScript 5中,您可以使用如下内容进行多边形填充:
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
具有更多的浏览器支持
var FooPrime = function() {
return new Foo(...arguments);
}
在ECMAScript 5中,可以使用如下内容进行多边形填充:
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
具有更多的浏览器支持
var FooPrime = function() {
return new Foo(...arguments);
}
new(Function.prototype.bind.apply(Foo[null].concat(argsArray))()代码>(借用自)新建(Function.prototype.bind.apply(Foo[null].concat(argsArray))
(借用自)这很完美,但不幸的是,它不适用于es6类,即class Foo
(它给出TypeError:class构造函数不能在没有“new”的情况下调用
)。es6类是否有一个等价物(但没有使用Reflect,因为Chrome目前不支持它)?@MachineHost您可以使用扩展运算符:new Foo(…arguments)
,这很完美,但不幸的是它不适用于es6类,即class Foo
(它给出了TypeError:Class构造函数不能在没有“new”的情况下调用。
)。es6类是否有一个等价的类(但没有使用Reflect,因为Chrome目前不支持它)?@machineghost您可以使用扩展运算符:new Foo(…参数)