在 JavaScript 中,可能需要使用 new 运算符创建对象实例同时向构造函数传递可变数量的参数。但是,使用您提供的代码片段无法实现此目的。
1. Matthew Crumley 的方法:
此解决方案涉及创建一个新函数 F,它扩展 Something 原型并为 apply() 方法提供包装器。可以按如下方式实现:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
2. ECMAScript 5 解决方案:
使用 ECMAScript 5,可以使用 Function.prototype.bind 方法来获得更简洁的解决方案:
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
可以按如下方式使用此函数:
var s = newCall(Something, a, b, c);
甚至直接:
var s = new (Function.prototype.bind.call(Something, null, a, b, c));
解释:
bind 方法允许我们创建一个新函数,它与原始函数具有相同的上下文(this 值),但采用有限数量的参数。通过使用 apply() 方法,我们可以将可变数量的参数传递给绑定函数。最后,可以将 new 运算符应用于绑定函数来创建新的对象实例。
以上是您可以在 JavaScript 中使用'new”运算符和'.apply()”来创建带有变量参数的对象吗?的详细内容。更多信息请关注PHP中文网其他相关文章!