Javascript获取类型/实例名
javascript get type/instance name
是否有可靠的方法获得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。
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- ES6 类扩展本机类型使实例在某些 JavaScript 引擎中出现意外行为
- 确定javascript对象实例的类型
- JavaScript中Var类型的新实例
- 当类型存储在变量中时,不使用eval创建对象的实例
- 创建javascript子类型的实例会产生意外行为
- 为什么我在尝试实例化一个空的backbone.js视图时出现类型错误
- backbone.js未捕获类型parentView尝试实例化子视图时出错
- 如何在 Node 中抓取标签的每个实例
- 何时有时将对象类型定义为将实例绑定方法镜像为构造函数上的静态实用程序函数很有用
- 类型运算符和实例运算符为同一 var 返回不同的信息
- 在一个 jQuery 对象中抓取多种类型的标签
- JavaScript 如何在运行时推断实例类型
- 如何在事后更改对象实例的类型
- 未捕获的错误:无法为每个类型实例化多个具有相同id的Backbone.RelationalModel
- 引导类型提前预取功能
- jQuery抓取上传的文件,输入类型='文件'
- 从集合中抓取所有一个值类型
- typesings: JS模块导出类实例的类型声明,带有类的原型
- 无法从JSON字符串实例化类型的值;没有单字符串构造函数/工厂方法