我的IE调试工作在今天结束,发现constructor.name是未定义的.
我创建了以下简单的代码来重现问题:
({}).constructor.name === undefined // => true
有没有解决办法使这项工作?
也许可以覆盖原型?
如果可能,我不想更改语法,因为更改将是重要的.
解决方法
问题在于Internet Explorer中不支持功能对象的name属性.该属性是非标准的(直到ECMAScript 6,至少),所以这并不完全令人惊讶.
没有一个完全可靠的解决方法,所以如果可能,我建议尽量不要这样做.但是,您可能可以从函数的字符串表示中提取名称.这里有几个链接来处理这个,我从一个快速搜索:
> Javascript get Function Name?
> https://gist.github.com/dfkaye/6384439
更新
从注释中可以看出,问题作者的目标是测试变量是否是由对象构造函数创建的普通对象的引用.一个可靠的方式来做这个变量a是
Object.prototype.toString.call(a) == "[object Object]"
有关更多信息,请推荐Angus Croll撰写的以下页面:
http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/