函数是否无法返回构造函数并创建新实例?

时间:2014-12-20 22:02:27

标签: javascript object constructor

我有以下JavaScript代码,由一个函数和两个构造函数组成:

function get_type(type){
    switch(type){
        default: case "a": return apple; break;
        case "b": return banana; break;
    }
}

function apple(color){
    this.color = color;
    this.age   = 0;
}

function banana(length,unit){
    this.length = length;
    this.unit   = unit||"cm";
    this.age    = 0;
}

当我尝试创建值为macintosh的变量new get_type("a")("red")时,其值为undefined,即使get_type("a")成功返回apple构造函数

我的代码有问题,还是不可能有返回构造函数的函数?

编辑:构建变量macintosh

var macintosh = new get_type("a")("red")

2 个答案:

答案 0 :(得分:2)

您的问题是新运营商的特殊性。您的代码基本上是这样的:

var macintosh = (new get_type("a"))("red")

创建get_type类型的对象,然后将参数传递给它。你想要的是这个:

var macintosh = new (get_type("a"))("red")

首先获取构造函数,然后使用它。

答案 1 :(得分:0)

您必须发出new才能创建新实例。

function get_type(type){
switch(type){
    default: case "a": return new apple(); break;
    case "b": return new banana(); break;
 }
}