如何在全局函数中将特定对象绑定到此关键字?

时间:2017-09-11 13:41:33

标签: javascript

我定义了以下函数,我希望console.log(this)返回原始数组[3,4,5]。但是,它返回一个窗口对象。我尝试使用apply和bind,它没有用。

抱歉,我是Javascript的新手,提前谢谢!

function Filterstuff(arr) {
    var currentArray = arr;
    return (function arrayFilterer(predicate,callback) {
        if(typeof predicate != "function")
            return currentArray;
        currentArray = currentArray.filter(predicate);
        callback.apply(arr,currentArray); // call back apply
        if(typeof callback == "function")
            callback(currentArray); 
        return arrayFilterer;
    });
}



var arrayFilterer = Filterstuff([3,4,5]); 

arrayFilterer(function (elem) {
  return elem !== 4; 
}, function (currentArray) {
  console.log(this); 
  console.log(currentArray);
});

结果:圆形一个console.log(this)返回原始数组,但是第二轮它再次返回窗口result

1 个答案:

答案 0 :(得分:1)

是的,apply可行,或更简单的call

function filterStuff(originalArray) {
    return function arrayFilterer(predicate, callback) {
        var resultArray = originalArray.filter(predicate);
        callback.call(originalArray, resultArray);
//              ^^^^^^^^^^^^^^^^^^^
    };
}