在 JavaScript 中获取对象类型的名称
Java 提供了 class.getName() 方法来检索对象的类型,JavaScript 缺乏直接的等价物。然而,可以采用多种技术来实现类似的结果。
一种方法涉及修改对象的原型以添加 getName() 函数:
Object.prototype.getName = function() { var funcNameRegex = /function (.{1,})\(/; var results = (funcNameRegex).exec((this).constructor.toString()); return (results && results.length > 1) ? results[1] : """"; };
通过此 hack,所有对象都将现在有一个 getName() 方法,它以字符串形式返回构造函数的名称。
另一个选项是使用 constructor 属性。虽然它通常适用于测试对象的类型,如下所示:
var myArray = [1,2,3]; (myArray.constructor == Array); // true
但是,有一些警告可能会破坏其可靠性,例如多重继承或不使用“new”关键字创建的对象。
instanceof 运算符是另一种选择,但它也有其局限性。它不适用于文字值,需要使用正确的构造函数创建对象。
另一种方法是使用 constructor.name 属性,尽管它可能不适合 IE9 或更低版本。为了兼容性,可以实现猴子补丁解决方案:
if (Function.prototype.name === undefined && Object.defineProperty !== undefined) { Object.defineProperty(Function.prototype, 'name', { get: function() { var funcNameRegex = /function\s([^(]{1,})\(/; var results = (funcNameRegex).exec((this).toString()); return (results && results.length > 1) ? results[1].trim() : """"; }, set: function(value) {} }); }
最后,Object.prototype.toString可用于确定所有内置类型的类型,但它为所有内置类型返回“Object”用户定义的类型。
在选择确定 JavaScript 中对象类型的方法时,了解每种方法的注意事项和限制非常重要。
以上是如何在 JavaScript 中获取对象类型的名称?的详细内容。更多信息请关注PHP中文网其他相关文章!