首页 >web前端 >js教程 >您可以在 JavaScript 中使用'new”运算符和'.apply()”来创建带有变量参数的对象吗?

您可以在 JavaScript 中使用'new”运算符和'.apply()”来创建带有变量参数的对象吗?

Patricia Arquette
Patricia Arquette原创
2024-12-06 21:43:15611浏览

Can You Use the `new` Operator with `.apply()` in JavaScript to Create Objects with Variable Arguments?

使用 new 运算符调用 .apply() 方法:可行吗?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn