在 JavaScript 中,通常使用“new”运算符构造对象实例通过直接将参数传递给构造函数来完成。然而,在某些情况下,人们可能希望动态提供参数。本文解决了使用 '.apply()' 和 'new' 运算符来完成此操作是否可行的问题。
尽管它有多功能性,“.apply()”方法不能直接与“new”运算符一起使用。尝试这样做会导致意外的行为或错误。
认识到对此类功能的需求,JavaScript 社区提出了各种创新解决方案。
一种方法(归功于 Matthew Crumley)利用函数原型来创建解决方法:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
此解决方案有效地创建了具有所需行为的新函数。
ECMAScript 5 的“Function.prototype.bind”提供了更简洁的解决方案:
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
此方法与“新”运算符无缝集成可以应用于所有类型的构造函数,包括具有“Date”等特殊行为的构造函数。
虽然由于潜在的安全问题而不鼓励使用,但“eval”方法提供了另一个解决方法:
var s = eval("new Something(" + [a, b, c] + ")");
这些解决方案利用了bind()方法创建一个接受所需参数的函数。然后,使用“new”运算符从该函数实例化一个对象。
使用“.apply()”创建具有可变参数的对象,并且“new”运算符需要一些独创性。通过利用可用的 JavaScript 功能,开发人员可以实施这些技术来实现他们所需的功能。
以上是你可以在 JavaScript 中使用 `.apply()` 和 `new` 运算符来创建带有变量参数的对象吗?的详细内容。更多信息请关注PHP中文网其他相关文章!