Javascript获取类型/实例名

javascript get type/instance name

本文关键字:实例 取类型 获取 Javascript      更新时间:2023-09-26

是否有可靠的方法获得JavaScript对象的实例?

例如,依靠假的' obj.getInstance() '函数。

var T = {
    Q: {
        W: {
           C: function() {}
        }
    } 
};
var x = new T.Q.W.C();
console.log( x.getInstance() === T.Q.W.C); // should output true

如果这不是ECMA规范的一部分,请在回答中包括浏览器/node.js的支持和兼容性。

仅在Chrome上测试:

function FooBar() {
}
var foobar = new FooBar();
console.log(foobar.constructor.name);  // Prints 'FooBar'

要获得一个指向实例化函数的指针(它不是一个"类",而是类型),使用obj.constructor,其中obj是任何对象。


在JavaScript中没有类。因此,JavaScript中没有类实例。只有物体。对象从其他对象继承(它们所谓的原型)。你在代码中所做的就是定义一个对象T,它的属性Q是另一个对象,它的属性W是另一个对象,它的属性C是一个函数。

当你"创建T.Q.W.C的新实例"时,你实际上只是将函数T.Q.W.C作为构造函数调用。作为构造函数调用的函数将返回调用构造函数的新对象(即this作为新对象,与constructorFunction.apply(newObject, arguments);一样)。返回的对象将具有一个隐藏属性constructor,该属性将指向作为构造函数调用以创建该对象的函数。此外,还有一个语言特性允许您使用instanceof操作符测试给定函数是否被用作对象的构造函数。

那么你可以这样做:

console.log(x instanceof T.Q.W.C);

console.log(x.constructor === T.Q.W.C);

如果有人在2017年还在读这篇文章:

要小心使用obj.constructor,因为它不是一个不可变的属性。

instanceof操作符通常更可靠。您也可以使用Object.getPrototypeOf(obj):

var arr = [];
arr instanceof Array; // true
Object.getPrototypeOf(arr); // Array [  ]
Object.getPrototypeOf(arr) === Array.prototype; // true

查看这个有用的文档:

https://github.com/getify/You-Dont-Know-JS/blob/master/this%20%26%20object%20prototypes/ch5.md

我遇到了一些麻烦,解决方案是:

String(x.constructor) === String(T.Q.W.C)

你可以这样做:

    get(){ // Method
        for ( var nameOfVariable in window ) 
            if (eval(nameOfVariable +"=== this")) return nameOfVariable;// true if variable name is instace of this
        return "";            
    }

请注意,constructor .name不能与最小化一起使用(它将是一个空字符串)-这里只能使用instanceof。