javascript - 在 JavaScript 中,如何使用参数值数组构造对象,而不是列出它们?

标签 javascript oop firefox-addon new-operator apply

这可能吗?我正在创建一个单一的基本工厂函数来驱动不同类型的工厂(但有一些相似之处),我希望能够将参数作为数组传递给基本工厂,然后可能会创建一个新对象的实例来填充参数通过数组的相关类的构造函数。

在 JavaScript 中,可以通过 apply 方法使用数组来调用具有多个参数的函数:

namespace.myFunc = function(arg1, arg2) { //do something; }
var result = namespace.myFunc("arg1","arg2");
//this is the same as above:
var r = [ "arg1","arg2" ];
var result = myFunc.apply(namespace, r);

虽然似乎没有办法使用 apply 创建对象的实例,是吗?

类似的东西(这不起作用):

var instance = new MyClass.apply(namespace, r);

最佳答案

试试这个:

var instance = {};
MyClass.apply( instance, r);

关键字“new”所做的就是将一个新对象传递给构造函数,然后该对象成为构造函数中的 this 变量。

根据构造函数的编写方式,您可能必须这样做:

var instance = {};
var returned = MyClass.apply( instance, args);
if( returned != null) {
    instance = returned;
}

更新:评论说,如果有原型(prototype),这将不起作用。试试这个。

function newApply(class, args) {
    function F() {
        return class.apply(this, args);
    }
    F.prototype = class.prototype;
    return new F();
}

newApply( MyClass, args);

关于javascript - 在 JavaScript 中,如何使用参数值数组构造对象,而不是列出它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813383/

相关文章:

javascript - 将选定区域作为图像上传到服务器

javascript - scriptaculous draggables : need to cancel onClick action when element is dragged

javascript - 为什么 -0 存在?

javascript - 如何在 Netsuite 'N/search Module' 中使用 for 循环获取第一组千条记录和下一组千条记录

JavaScript block CSS

javascript - 在 Firefox 扩展中使用 JavaScript 删除 cookie

javascript - 更改最后的属性值

javascript - 像面向对象编程一样将组件作为实例进行 react

c - C语言的基本封装

c++ - 抽象类代码错误