Я попытаюсь объяснить это лучшее, что я могу, начав с краткого резюме моего понимания областей, которые имеют отношение к моей проблеме:Что означает ключевое слово «this», когда внутри закрытия метода JavaScript?
Метод: метод является JS, когда функция является свойством объекта, когда этот используется в рамках метода, который относится к объекту, который является свойством функции.
Функция: этот используется в функции, которая не является свойством объекта, связано с глобальным объектом (в HTML-страницу, это будет объект окна).
Закрытие: это из внутренней функции метода относится к глобальному объекту также. Это может быть исправлено путем «, что этот =» в методе и использовании , что вместо это в замыкании.
В следующем примере, который я видел в Дуглас Crockfords «JavaScript - The Good Parts», кажется, разрушить мое нынешнее понимание того, как это должно работать внутри закрытия:
String.method('deentityify', function(){
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
return function(){
return this.replace(/&([^&;]+);/g,
function(a,b){
var r = entity[b];
return typeof r === 'string' ? r : a;
}
};
}());
//Just for reference
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
это называют в закрытии метода deentityify относится к строковому объекту, на котором выполняется этот метод. Это не имеет для меня никакого смысла? Я думал, что этот здесь должен ссылаться на глобальный объект.
О, у меня есть это сейчас ... Закрытие возвращается как метод deentityify, – raah
Вы не можете просто принять значение 'this', проанализировав определение функции. Например, 'var fn = String.deentityfy; п(); // это === окно'. Это то, как вы называете свою функцию и как вы ее связываете. – MinusFour
Да, я понимаю, что я не включал в этот вопрос и в ретроспективе должен был контекст исполнения ... на самом деле я описал контекст выполнения в конце вопроса «... строковый объект, на котором этот метод выполняется на « – raah