我有一个变量this.myvar
,它是一个数组。我想使用此变量制作一个_.filter()
,但在_.filter()
- 函数中我的this.myvar
未知。
有没有办法解决这个问题,还是我偶然误解了什么?
this.my_array = ['aaa', 'bbb', 'ccc', 'ddd'];
this.my_filter = ['aaa', 'ccc'];
my_filtered_object = _.filter(this.my_array, function(item) {
alert(this.my_filter.toSource());
/*
if(this.my_filter.indexOf(item) != -1) {
return item;
}
*/
});
警报应显示this.my_filter
的值,但似乎_.filter()
内无法访问该变量
答案 0 :(得分:2)
有各种解决方案。
将引用存储在单独的变量中:
^
将var my_filter = this.my_filter;
my_filtered_object = _.filter(this.my_array, function(item) {
alert(my_filter.toSource());
});
内的上下文(this
)设置为指向函数外的_.filter()
:
this
使用arrow function expression(虽然这可能不适用于所有浏览器):
my_filtered_object = _.filter(this.my_array, function(item) {
alert(this.my_filter.toSource());
}, this);
按照马里奥的回答建议使用_.bind()
。
解决方案#2对我来说最有意义。
答案 1 :(得分:2)
如果要访问 this.my_filter ,则传递给 _。filter()的匿名函数需要绑定到您的上下文。
使用下划线,您只需更改代码,如下所示:
my_filtered_object = _.filter(this.my_array, _.bind(function(item) {
alert(this.my_filter.toSource());
/*
if(this.my_filter.indexOf(item) != -1) {
return item;
}
*/
}, this));
正如您所看到的,我添加了 _。bind()方法,该方法将您需要的上下文附加到匿名函数。