在javascript中存储对象类型

时间:2014-01-09 14:14:19

标签: javascript typescript

我试图将对象类型存储到变量而不是创建实际对象。根据类型,我想在需要时创建对象。

我已尝试使用以下方法获取类型

function getType(obj){
        var text = Function.prototype.toString.call(obj.constructor);
        return text.match(/function (.*)\(/)[1];
}

但是上面的方法问题,它调用构造函数来获取类型名称。

我不想在实际需要之前初始化对象。

任何想法。

由于 那仁

3 个答案:

答案 0 :(得分:1)

我认为你正在寻找

function getType(fn) {
    return fn.name || fn.toString().match(/function\s+([^(\s]*)/)[1];
}

可以用

调用
function Class() {}
getType(Class) // "Class"

var instance = new Class;
getType(instance.constructor) // "Class"

请注意,您不应在生产中使用它。有些js实现既不支持name也不支持toString。在您需要的地方为您的构造函数设置自定义.type属性。

答案 1 :(得分:0)

也许这就是你要找的东西?

function getClassName(obj){
  return obj.constructor.name;
}

答案 2 :(得分:0)

您是否尝试过调用toString()函数?

function getType(obj) {
    var text = obj.toString();
    return text.match(/function (.*)\(/)[1];
}

在下面的示例中, result 变量将包含“Demo”,并且不会调用构造函数:

class Demo {
    abc:any;
    constructor(a: number) {
        this.abc = a;
    }
}
var result = getType(Demo);