Ion*_*zău 12 javascript internet-explorer constructor object
我在IE浏览器调试工作今天结束的发现constructor.name是undefined.
我创建了以下简单的代码来重现问题:
({}).constructor.name === undefined // => true
Run Code Online (Sandbox Code Playgroud)
是否有任何解决方法可以使这项工作?
也许压倒一些原型?
如果可能,我不想更改语法,因为更改将是主要的.
小智 14
/**
* Hack in support for Function.name for browsers that don't support it.
* IE, I'm looking at you.
**/
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) {}
});
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*own 12
问题很简单,nameInternet Explorer不支持函数对象的属性.该属性是非标准的(至少在ECMAScript 6之前),所以它并不令人惊讶.
没有完全可靠的解决方法,所以如果可能的话,我建议尝试不使用它.但是,您可以从函数的字符串表示中提取名称.我从快速搜索中得到了几个处理这个问题的链接:
更新
从评论中可以看出,问题作者的目标是测试变量是否是对Object构造函数创建的普通对象的引用.为变量执行此操作的可靠方法a是
Object.prototype.toString.call(a) == "[object Object]"
Run Code Online (Sandbox Code Playgroud)
有关更多信息,我建议使用Angus Croll撰写的以下页面:
http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/
| 归档时间: |
|
| 查看次数: |
7688 次 |
| 最近记录: |