【发布时间】:2015-10-22 19:32:26
【问题描述】:
(免责声明:我正在学习 JavaScript) 我有一个像这样的对象构造函数:
var Palette = function() {
this.colors = ["red", "green", "blue"];
this.getColorCombinations = function() {
var combos = [];
this.colors.forEach(function(a) {
this.colors.forEach(function(b) {
if(a !== b) {
combos.push([a, b]);
}
});
});
return combos;
};
}
var p = new Palette();
alert(JSON.stringify(p.getColorCombinations()));
预期输出:
[["red","green"],["red","blue"],["green","red"],["green","blue"],["blue","red"],["blue","green"]]
经过一些研究,我现在意识到 this 不起作用,因为在内部匿名函数中,“this”指向全局对象,而不是 Palette 实例了。
我的问题是,处理这个问题的“JavaScript 方式”是什么?我看到类似的问题可以通过 Apply、Bind、Call 或简单地将 this 分配给变量来解决,但到目前为止我没有找到任何示例说明在内部匿名函数中引用 this 始终是最佳实践。
here 是 JsFiddle。 (我将其修改为输出到 div 以便于文本复制)
【问题讨论】:
-
取决于您是否转译以支持旧浏览器。最好的解决方案是胖箭头函数:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 第二好的是 rossipedia 的答案。任何专业的 js 开发者都可能对它们都很熟悉。
-
……第三好的是
Function.prototype.bind。
标签: javascript foreach