将范围传递给 forEach
Passing scope to forEach
我正在尝试使用回调方法addToCount
而不是forEach
中的匿名函数。但是我无法访问其中的this.count
(返回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;
}
}
我认为问题在于范围。如何将this
传递给addToCount
,或者有没有其他方法可以使其工作?
您需要使用 Function#bind
来绑定作用域:
words.forEach(this.addToCount.bind(this));
请注意,这并非在所有浏览器中都可用:您应该使用填充程序(如上面的链接中提供)将其添加到不支持 Function#bind
的浏览器中。
正如 dandavis 在注释中指出的那样,您可以将一个值传递给 Array#forEach
作为回调的上下文:
words.forEach(this.addToCount, this);
试试这样的事情。我用了that
而不是_this
,但我也addToCount
移动了,所以它在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;
});
}
}
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- Foreach无法在Typescript中工作
- $rootScope未使用forEach进行更新
- 如何制作简单的php'在Javascript中的foreach等价物
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- HTML范围:动态设置值属性
- "实例范围”;TypeScript类的getter/setter
- jquery日期选择器年份范围默认值
- Jpgraph:如何手动设置X轴和Y轴的范围
- 在对象数组中查找多个值的d3范围
- 动态加载angularjs并生成控制器和范围
- angular.forEach,可以使用函数(键)作为范围扩大
- 使用forEach修改角度范围变量
- 淘汰赛:can't从嵌套foreach访问父级范围的属性
- 将范围传递给 forEach
- ES6 循环和 forEach 中的上下文和变量范围
- Keystone.js嵌套承诺 -> foreach -> 列表查找范围问题
- javascript和变量范围中foreach内部的函数
- 谷歌应用脚本- ForEach在范围内