8

因此,在尝试执行以下操作时,我在 IE11 中收到错误“无效调用对象”:

window.toString.call({});

当我期望看到 => "[object Object]"

这种形式似乎有效:

({}).toString();

这两种形式在 chrome 中似乎都可以正常工作,我错过了什么吗?

4

1 回答 1

21

你似乎忽略了事实

window.toString === Object.prototype.toString; // false

Window 是特定于实现的toString,规范中没有说明DOM 宿主对象上的方法必须与call/on other objects/etc一起使用

如果你想捕捉这个toString但不能假设原型,试试

var toString = ({}).toString;
toString.call({}); // "[object Object]"

您也可以考虑call通过包装或使用每次跳过bind

var toString = function (x) { return ({}).toString.call(x); };
toString(10); // "[object Number]"
// or
var toString = ({}).toString.call.bind(({}).toString);
toString(true); // "[object Boolean]"
于 2013-10-11T15:34:18.213 回答