javascript - 获取对象类型

标签 javascript object

更新 这是最终的工作代码——以防万一有人发现它有帮助:jsfiddle

我把它写成类型检测器。它在所有情况下都运行良好——到目前为止,无论我测试过什么,但仅在一种情况下失败。

首先,这是片段:jsfiddle

var TypeOf = function ( thing ) {
    var typeOfThing = typeof thing;
    if ( typeOfThing === 'object' ) {
        typeOfThing = Object.prototype.toString.call(thing);
        if ( typeOfThing === '[object Object]') {
            if ( thing.constructor.name ) 
                typeOfThing = thing.constructor.name;
            else if ( thing.constructor.toString().charAt(0) === '[' ) 
                typeOfThing = typeOfThing.substring(8,typeOfThing.length - 1);
            else
                typeOfThing = thing.constructor.toString().match(/function\s*(\w+)/)[1];
        } else {
            typeOfThing = typeOfThing.substring(8,typeOfThing.length - 1);
        }
        return typeOfThing.toLowerCase();
    } else {
        return typeOfThing;
    }
}

问题是,如果我在 parse-time 定义函数,那么它将完美地工作:

function me () {};
var you = new me();
console.log('Type of you: ' + TypeOf(you));    // me

但是,如果我只是在运行时 定义它,那么它不会工作:

var me = function () {};
var you = new me();
console.log('Type of you: ' + TypeOf(you));    // nope

据我所知,在解析时的情况下,constructor 类似于 function me () {},因此我可以使用 获取它/function\s*(\w+)/,但是在运行时情况下,构造函数是 function () {}

有什么办法可以让它发挥作用吗?此外,还有其他情况表明此代码段可能无法检测到类型吗?

更新@lonesomeday评论中提到,似乎我正在尝试获取匿名函数的名称。这对我来说看起来有点可怕。这可能吗?

更新@jackson下面说了,好像正确的输出应该是function而不是me。这真的是正确的吗?

最佳答案

您的测试实际上成功了。该变量的类型确实是“函数”。

考虑到您的 function me () {}; 在您的测试中的并列,您似乎已经预料到附近的语法略有修改的测试会产生类似的结果。但这种情况并非如此。 you 没有理由拥有“我”的“类”(实际上不是类)。它只是一个常规的旧“函数”,仅此而已。

关于javascript - 获取对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20440498/

相关文章:

javascript - CSS 相对位置/正常位置问题

javascript - 如何根据最高跨度调整相邻跨度的跨度高度

javascript - 使用 jQuery 将动态内容添加到多个元素

javascript - 获取数组中的对象

object - 在 PowerShell 中使用多个参数实现自己的方法

ios - 无法分配给属性 'observationTime' 是一个只读属性

java+json : how to get an element from a json object that contains an array of objects {[ {}, {}]}

javascript - 如何在选择中返回选项元素的数据属性?

javascript - 通过单击外部关闭 div 时出现问题

javascript - 根据键和值对对象数组进行排序