因此,在尝试执行以下操作时,我在 IE11 中收到错误“无效调用对象”:
window.toString.call({});
当我期望看到 => "[object Object]"
这种形式似乎有效:
({}).toString();
这两种形式在 chrome 中似乎都可以正常工作,我错过了什么吗?
因此,在尝试执行以下操作时,我在 IE11 中收到错误“无效调用对象”:
window.toString.call({});
当我期望看到 => "[object Object]"
这种形式似乎有效:
({}).toString();
这两种形式在 chrome 中似乎都可以正常工作,我错过了什么吗?
你似乎忽略了事实
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]"