3

我在哪里做错了?

由于这段代码,我会等待“Class”,但它不会:

在此处输入图像描述

这是来自对象函数:

在此处输入图像描述

4

4 回答 4

3

Tyepof 不是这样工作的,它只返回内置类型。你可以试试:

this.constructor.name==="Class";

它将一直检查原型链以查看是否this或任何原型this是 Class。因此,如果OtherType.prototype=Object.create(Class);那样的话,对于任何 OtherType 实例都是如此。不适用于 < IE9

或者

this instanceof Class

但这不会检查整个原型链。

是 typeof 可以返回的返回值列表

是一个关于获取变量类型的答案,该变量具有更多详细信息并显示了它可以破坏的多种方式。

于 2013-07-05T08:09:12.543 回答
2

因为 JavaScript 只知道以下类型:

未定义 - “未定义”

空 - “对象”

布尔值 - “布尔值”

数字 - “数字”

字符串 - “字符串”

宿主对象(由 JS 环境提供) - 依赖于实现

函数对象(在 ECMA-262 术语中实现 [[Call]]) - “函数”

E4X XML 对象 - “xml”

E4X XMLList 对象 - “xml”

任何其他对象 - “对象”

你可以在这里找到更多

阅读线程以了解如何获取对象名称

于 2013-07-05T08:15:28.363 回答
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"
于 2013-07-05T08:18:27.607 回答
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
于 2013-07-05T09:09:12.667 回答