所以我有这个代码只是按价格或用户想要的任何东西对产品列表进行排序,并且它有效:
var sortProductsBy = function(products, sortType){
//sort type is a string, it could be 'price'
products.sort(function (product1, product2) {
var product1AttrValue = parseInt( $(product1).attr(sortType).replace('$','') );
var product2AttrValue = parseInt( $(product2).attr(sortType).replace('$','') );
if (product1AttrValue < product2AttrValue ) {
return -1;
}
if (product1AttrValue > product2AttrValue) {
return 1;
}
return 0;// product1 must be equal to product2
})
};
我作为sort函数的参数定义的sort函数回调很长,所以我想将它解耦,在别处定义它,并在我的sort函数中传递如下:
var sortProductsBy = function(products, sortType){
//I need compareFunc to somehow have access to sortType
products.sort(compareFunc)
}
我需要我的compareFunc以某种方式访问传入的sortType变量,但由于我想要访问它的范围。有没有一种方法可以以某种方式获得对它的访问,而不必像在第一个代码片段中那样定义我的整个回调?
答案 0 :(得分:1)
如果你有var sortProductsBy = function (products, sortType) {
products.sort(compareFunc.bind(null, sortType));
}
:
movie1 ACTION|ADVENTURE
movie2 ACTION|ADVENTURE|DRAMA
...
请参阅:.bind
答案 1 :(得分:-1)
从回调中调用compareFunc
会有效。
function compareFunc(sortType) {
// use sortType
}
var sortProductsBy = function(products, sortType){
//I need compareFunc to somehow have access to sortType
products.sort(function() {
compareFunc(sortType);
});
}
另外,请查看JavaScript函数bind()
和call()
,然后尝试使用这些函数,以获得乐趣。