我定义了以下函数,我希望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);
});
答案 0 :(得分:1)
是的,apply
可行,或更简单的call
:
function filterStuff(originalArray) {
return function arrayFilterer(predicate, callback) {
var resultArray = originalArray.filter(predicate);
callback.call(originalArray, resultArray);
// ^^^^^^^^^^^^^^^^^^^
};
}