Привязать именованную функцию к контексту - PullRequest
0 голосов
/ 11 мая 2018

У меня есть именованная функция, подобная этой

function handler(arg) {
  this.arg = arg;
}

Есть ли способ привязать контекст к этой функции?

Я ищу что-то вроде этого

function handler(arg) {
  this.arg = arg;
}.bind(this);

, что позволит вызывать эту функцию в любом контексте, но всегда будет использовать связанный контекст.

Например, у меня есть другая функция (в коде поставщика, которую я не могу редактировать)

addEventListener(callback) {
   callback(currentArg);
}

где я передам обработчик, и он будет выполнен с привязанным контекстом

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Если вы просто хотите избежать изменения контекста, вы можете использовать функцию стрелки:

handler = (arg) => {
    this.arg = arg;
};
0 голосов
/ 11 мая 2018

Я не уверен, где и как вы собираетесь его использовать, но вы можете использовать выражение функции вместо замедления функции:

 var handler = function handler(arg) {
  this.arg = arg;
}.bind(this)

Или просто использовать функцию стрелки который будет использовать лексический контекст для this:

var handler = (arg) => {...}
0 голосов
/ 11 мая 2018

С MDN

Метод bind () создает новую функцию, для которой при вызове для этого ключевого слова устанавливается заданное значение с заданной последовательностью аргументовперед любым указанным при вызове новой функции.

В соответствии с этим определением вы можете сделать следующее

function handler(arg) {
  this.arg = arg;
}

var newFunc = handler.bind(newContext,arg);
...