Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

 

Сообщение

TypeError: 'this' не является  Set объектом (EdgE)
TypeError: Function.prototype.toString вызывается несовместимый объект (Firefox)
TypeError: Function.prototype.bind вызывается несовместимая цель (Firefox)
TypeError: Метод Set.prototype.add called вызывается несовместимый приемник undefined (Chrome)
TypeError: Bind должен вызываться для функции(Chrome)

Тип ошибки 

TypeError

Что пошло не так?

При возникновении этой ошибки вызывается функция (для данного объекта) с типом this, не соответствующим типу, ожидаемому функцией.

Эта проблема может возникнуть при использовании Function.prototype.call() ил Function.prototype.apply() методы и предоставление аргумента this, который не имеет ожидаемого типа.

Эта проблема также может возникнуть при предоставлении функции (хранящейся в объекте) в качестве аргумента другой функции. В этом случае объект не будет целью this функции. Чтобы обойти эту проблему, необходимо либо предоставить лямбда-код, который выполняет вызов, либо использоватьFunction.prototype.bind() функция для принудительной передачи аргумента this ожидаемому объекту.

Примеры

Неправильные

var mySet = new Set;
['bar', 'baz'].forEach(mySet.add);
// mySet.add is a function, but "mySet" is not captured as this.

var myFun = function () {
  console.log(this);
};
['bar', 'baz'].forEach(myFun.bind);
// myFun.bind is a function, but "myFun" is not captured as this.

Правильные

var mySet = new Set;
['bar', 'baz'].forEach(mySet.add.bind(mySet));
// This works due to binding "mySet" as this.

var myFun = function () {
  console.log(this);
};
['bar', 'baz'].forEach(x => myFun.bind(x));
// This works using the "bind" function. It creates a lambda forwarding the argument.

Смотрите также

Метки документа и участники

Внесли вклад в эту страницу: palpich, MakarovDs777, Toshakins, mdnwebdocs-bot
Обновлялась последний раз: palpich,