访问_.filter中的this.var?

时间:2016-08-04 08:00:49

标签: javascript jquery underscore.js

我有一个变量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()内无法访问该变量

2 个答案:

答案 0 :(得分:2)

有各种解决方案。

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

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

    this
  3. 使用arrow function expression(虽然这可能不适用于所有浏览器):

    my_filtered_object = _.filter(this.my_array, function(item) {           
      alert(this.my_filter.toSource());   
    }, this);
    
  4. 按照马里奥的回答建议使用_.bind()

  5. 解决方案#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()方法,该方法将您需要的上下文附加到匿名函数。