我想编写一个函数,它接受一个函数和一些其他对象作为参数,并将这些参数作为函数的默认参数并返回一个新函数。
假设我们有drawRect(x,y,x2,y2)我想编写一个名为'partial'的函数,以便
(partial(drawRect, 0, 0))(x2, y2);
等于
drawRect(0, 0, x2, y2);
请注意,我希望功能部分灵活,因此它需要任何功能和任意数量的参数。
到目前为止,我已经写过:function temp(a, b, c, d){
document.write(a + b + c + d);
}
function partial(func){
var arr = new Array();
for (var i = 0; i<arguments.length; i++){
arr.push(arguments[i+1]);
}
var tf = function(){f.apply(this, arr.concat(func.arguments))}
console.log(2);
return tf;
}
var ff = partial(temp, 44, 55);
ff(20, 30);
但它在文档上写了一个'Nan'。我需要在调用时访问函数'ff'参数,但我不知道该怎么做。 你能帮我解决这个问题吗?
答案 0 :(得分:2)
那里似乎有很多不必要的测试代码,我已经清理过了。据我了解,下面的代码和this demo可以满足您的需求。
function temp(a, b, c, d){
console.log(a + b + c + d);
}
function partial(f){
var defaultArgs = Array.prototype.slice.call(arguments, 1);
var that = this;
var tf = function(){
f.apply(that, defaultArgs.concat(Array.prototype.slice.call(arguments)));
}
return tf;
}
var ff = partial(temp, 44, 55);
ff(20, 30);
// console output: 149
答案 1 :(得分:2)
您可以使用.bind()
function partial(f, x, y) {
return f.bind(this, x, y);
}