代码之家  ›  专栏  ›  技术社区  ›  airportyh

通过使用Apply调用带有参数列表的构造函数来实例化对象?

  •  2
  • airportyh  · 技术社区  · 15 年前

    给定这样的函数/类型声明:

    function Person(name, ... other args ...){
        this.name
        ... other init code ...
    }
    

    我希望能够使用要应用于它的参数数组调用Person构造函数。我能做到:

    Person.apply(this, args)
    

    除了不能实例化一个人外,它只是将其作为一个函数调用。在“新”的背景下,你是否可以这样称呼它,也就是说,行为如下:

    new Person(...)
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Eldar Djafarov    15 年前

    原因:

    var newInstance=Person.apply({}, args);
    

    您将对空对象应用构造函数。但您应该知道,这并不是类的真正实例。如果您想对类的实例下注,您应该将原型对象的克隆作为第一个参数。

        2
  •  1
  •   Community CDub    8 年前

    关于这件事有相当长的反复讨论 before .

    简言之,不,你不能这样做,让它适用于所有情况。这里有一些非常有价值的代码示例,说明如何在该链接中完成它,但是每个示例都有一个例子,说明它在哪里中断。不过,这对你来说可能已经足够好了。