Недопустимая ошибка вызывающего объекта в IE

Итак, я получаю сообщение об ошибке «Неверный вызывающий объект» в IE11 при попытке выполнить следующее:

window.toString.call({});

Когда я ожидаю увидеть => "[object Object]"

Эта форма, похоже, работает:

({}).toString();

Обе формы отлично работают в хроме, я что-то упустил?


person Jaboc83    schedule 11.10.2013    source источник


Ответы (1)


Вы, кажется, пренебрегаете фактом

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

Windows toString зависит от реализации, и в спецификации нет ничего, говорящего о том, что методы Host Objects DOM должны работать с call/другими объектами/и т. д.

Если вы хотите зафиксировать этот 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]"
person Paul S.    schedule 11.10.2013