繁体   English   中英

在_.filter中访问this.var?

[英]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()内似乎无法访问该变量

有各种解决方案。

  1. 将引用存储在单独的变量中:

     var my_filter = this.my_filter; my_filtered_object = _.filter(this.my_array, function(item) { alert(my_filter.toSource()); }); 
  2. _.filter() )内设置上下文( this )指向函数外部的this

     my_filtered_object = _.filter(this.my_array, function(item) { alert(this.my_filter.toSource()); }, this); 
  3. 使用箭头函数表达式 (尽管可能并非在所有浏览器中都有效):

     my_filtered_object = _.filter(this.my_array, item => { alert(this.my_filter.toSource()); }); 
  4. 使用_.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM