Я'м пытаюсь использовать метод обратного вызова addToCount
вместо анонимной функции в объекту
. Но я могу'т открыть это.граф в его (возвращает undefined`).
function Words(sentence) {
this.sentence = sentence;
this.count = {};
this.countWords();
}
Words.prototype = {
countWords: function() {
var words = this.sentence.split(/\W+/);
words.forEach(this.addToCount);
},
addToCount: function(word) {
word = word.toLowerCase();
if (word == '') return;
if (word in this.count)
this.count[word] += 1;
else
this.count[word] = 1;
}
}
Я думаю, что проблема в области. Как я могу передать это в addToCount или есть ли другой способ, чтобы заставить его работать?
Вы должны использовать #функция привязки
для связывания область:
words.forEach(this.addToCount.bind(this));
Обратите внимание, что это не во всех браузерах: следует использовать прокладку (как указано в ссылке выше), чтобы добавить его в браузерах, которые Дон't функция поддержки #персонализация
.
Как dandavis отмечает, в комментариях, вы можете передать значение массив#цикл foreach
в качестве контекста для обратного вызова:
words.forEach(this.addToCount, this);
Попробовать нечто подобное. Я've использовали что
, а не что
, но также Я'вэ переехал addToCount
так что's внутри countWords
. Что получается countWords
в закрытие, содержащее этот.
Words.prototype = {
countWords: function() {
var that = this, words = this.sentence.split(/\W+/);
words.forEach(function(word) {
word = word.toLowerCase();
if (word == '') return;
if (word in that.count)
that.count[word] += 1;
else
that.count[word] = 1;
});
}
}