【问题标题】:Invalid Calling Object error in IEIE 中的无效调用对象错误
【发布时间】:2015-02-12 08:15:22
【问题描述】:
所以我在尝试执行以下操作时在 IE11 中收到错误“无效调用对象”:
window.toString.call({});
当我期望看到 => "[object Object]"
这种形式似乎有效:
({}).toString();
这两种形式在 chrome 中似乎都可以正常工作,我错过了什么吗?
【问题讨论】:
标签:
javascript
internet-explorer
internet-explorer-11
【解决方案1】:
你似乎忽略了事实
window.toString === Object.prototype.toString; // false
Window 的 toString 是特定于实现的,规范中没有说明 DOM 宿主对象 上的方法必须与 call/ 其他对象一起使用/等
如果你想捕获这个toString 但不能假设原型,试试
var toString = ({}).toString;
toString.call({}); // "[object Object]"
您也可以考虑通过包装或使用 bind 每次跳过 call
var toString = function (x) { return ({}).toString.call(x); };
toString(10); // "[object Number]"
// or
var toString = ({}).toString.call.bind(({}).toString);
toString(true); // "[object Boolean]"