我在哪里做错了?
我会等待" Class"作为此代码的结果,但它没有:
这是来自对象功能:
答案 0 :(得分:3)
Tyepof不会那样工作,它只返回内置类型。你可以尝试:
this.constructor.name==="Class";
它将检查原型链的所有方向,以查看this
或this
的任何原型是否为Class。因此,如果OtherType.prototype=Object.create(Class);
,那么对于任何OtherType实例都是如此。不适用于< IE9
或
this instanceof Class
但这不会检查整个原型链。
Here是一个返回值类型列表,可以返回
Here是一个关于获取具有更多细节的变量类型的答案,并展示了它可以破解的多种方式。
答案 1 :(得分:2)
因为JavaScript只知道以下类型:
未定义 - “未定义”
空 - “对象”
Boolean - “boolean”
号码 - “号码”
字符串 - “字符串”
主机对象(由JS环境提供) - 依赖于实现
函数对象(在ECMA-262术语中实现[[Call]] - “function”
E4X XML对象 - “xml”
E4X XMLList对象 - “xml”
任何其他对象 - “对象”
您可以找到更多here
阅读this主题以了解如何获取对象名称
答案 2 :(得分:1)
object.constructor.name
将返回构造函数的名称。这是一个例子:
function SomeClass() {
/* code */
}
var obj = new SomeClass();
// obj.constructor.name == "SomeClass"
请注意,您需要使用命名函数,如果您将匿名函数分配给变量,它将是一个空字符串......
var SomeClass = function () {
/* code */
};
var obj = new SomeClass();
// obj.constructor.name == ""
但是你可以使用两者,然后将返回指定函数的名称
var SomeClassCtor = function SomeClass() {
/* code */
};
var obj = new SomeClassCtor();
// obj.constructor.name == "SomeClass"
答案 3 :(得分:0)
你也可以试试这个
function getType(obj){
if (obj === undefined) { return 'undefined'; }
if (obj === null) { return 'null'; }
return obj.constructor.name || Object.prototype.toString.call(obj).split(' ').pop().split(']').shift().toLowerCase();
}
function MyClass(){}
console.log(getType(new MyClass)); // MyClass
console.log(getType([])); // Array
console.log(getType({})); // Object
console.log(getType(new Array)); // Array
console.log(getType(new Object)); // Object
console.log(getType(new Date)); // Date
console.log(getType(new Error)); // Error