[英]access to this.var in _.filter?
我有一个变量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()
内似乎无法访问该变量
有各种解决方案。
将引用存储在单独的变量中:
var my_filter = this.my_filter; my_filtered_object = _.filter(this.my_array, function(item) { alert(my_filter.toSource()); });
在_.filter()
)内设置上下文( this
)指向函数外部的this
:
my_filtered_object = _.filter(this.my_array, function(item) { alert(this.my_filter.toSource()); }, this);
使用箭头函数表达式 (尽管可能并非在所有浏览器中都有效):
my_filtered_object = _.filter(this.my_array, item => { alert(this.my_filter.toSource()); });
使用_.bind()
,这是Mario在其答案中建议的。
解决方案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()方法,该方法将所需的上下文附加到匿名函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.