使用带有数组参数的bind apply时,参数会丢失

时间:2016-06-21 08:14:25

标签: javascript arrays arguments bind apply

我使用this answer here通过使用以下代码传递数组参数来构造新的类实例:

new ( Cls.bind.apply( Cls, arguments ) )();

但是我的一个参数是一个数组,并且在构造期间值会丢失

您可以查看演示此in this CodePen

的示例

在示例中,我传递了第三个参数properties

var properties = [
    { name: "first", value: "1" },
    { name: "second", value: "2" },
    { name: "third", value: "3" }
];

但结果中的属性为undefined

显然这里出了问题,但是为什么以及为什么?

1 个答案:

答案 0 :(得分:4)

您的代码几乎是正确的,但您需要向factory()传递一个额外的参数: factory(undefined, name, description, properties)

您在问题中链接到的答案中突出显示了这一点:

  

任何参数都不重要,因为new关键字会重置f的上下文。但是,出于语法原因需要它。现在,对于绑定调用:我们需要传递可变数量的参数,所以这样做的诀窍:   var f = Cls.bind.apply(Cls,[anything,arg1,arg2,...]);   result = new f();