.apply() 方法可以与 new 运算符一起使用吗?
在 JavaScript 中,通常使用 new 运算符创建对象实例涉及显式地将参数传递给构造函数。但是,可能需要传递可变数量的参数。本问题探讨了结合使用 .apply() 方法和 new 运算符来实现这种灵活性的可能性。
挑战
最初,人们可能会尝试以下代码:
function Something() { // init stuff } function createSomething() { return new Something.apply(null, arguments); } var s = createSomething(a, b, c); // 's' is an instance of Something
但是,这种方法不起作用,因为 new 运算符与 .apply() 不兼容
解决方案
已经提出了各种解决方案来克服此限制:
1. Matthew Crumley 的方法
此解决方案采用从目标构造函数继承的中间函数:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
2。 Function.prototype.bind
ECMAScript5 引入了 Function.prototype.bind 方法,该方法允许部分应用函数:
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
可以按如下方式使用:
var s = newCall(Something, a, b, c);
使用优点Function.prototype.bind
这种方法有几个优点:
说明
Function.prototype.bind 创建一个继承原始函数属性的新函数。通过部分应用带有所需参数的构造函数,我们可以使用 new 关键字创建一个实例。
以上是JavaScript 的 new 运算符可以与 .apply() 方法一起使用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!