我有这个代码:
function some_object(...) {
this.data = {...};
this.do_something = function(...) {
var arr = [...];
arr.sort(function (a, b) {
return this.data[a] - this.data[b];
});
}
}
Run Code Online (Sandbox Code Playgroud)
然而它不起作用我认为因为this无法访问sort- 另一个this是出于某种原因看到的,而不是this封闭的外部对象.
该怎么办?谢谢
Dou*_*ner 33
不同之this处在于,通过arr.sort调用函数将匿名函数(它自己的闭包)this设置为与主对象不同的项.在Array.sort中,我实际上并不确定this设置的是什么,但它可能是您正在排序的数组.在这种情况下正常的解决方法是使用另一个变量:
function some_object(...) {
var so = this; // so = current `this`
this.data = {...};
this.do_something = function(...) {
var arr = [...];
arr.sort(function (a, b) {
return so.data[a] - so.data[b];
});
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
您可以通过调用bind内部函数上的方法将"外部"实例绑定到"内部" 函数.在MDN了解更多信息.
示例:https://jsfiddle.net/eheobo/twv3emh7/1/
var foo = {
data: [1, 2, 3, 4],
bar: function () {
var printData = function(){
this.data.forEach(a => console.info(a))
}.bind(this)
printData()
}
}
foo.bar()
Run Code Online (Sandbox Code Playgroud)
我知道这是 2010 年的问题,但现在您可能应该使用箭头函数(和类):
class some_object {
constructor() {
this.data = {...};
}
do_something(...) {
let arr = [...];
arr.sort((a, b) => this.data[a] - this.data[b]);
}
}
Run Code Online (Sandbox Code Playgroud)
箭头函数没有this,因此它们使用封闭作用域中的那个。
| 归档时间: |
|
| 查看次数: |
8886 次 |
| 最近记录: |