在另一个排序函数中调用自定义 array.sort 函数



>有没有办法做到这一点?在下面的代码片段中,从sortByLyncStatus中调用sortByName this无法访问 FN

原型定义:

sortByName: function (bud, light) {
  if (bud.FullName < light.FullName)
    return -1;
  if (bud.FullName > light.FullName)
    return 1;
  return 0;
},
sortByLyncStatus: function (chuck, norris) {
  if (chuck.LyncAvailability == "Available" && norris.LyncAvailability == "Available") {
    return this.sortByName(chuck, norris);
  }
  else {
    if (chuck.LyncAvailability == "Available")
      return -1;
    if (norris.LyncAvailability == "Available")
      return 1;
    else { // both are away, inactive, offline, or out of office
      var chuckLastActive = $.toDateFromJson(chuck.LyncLastActive);
      var norrisLastActive = $.toDateFromJson(norris.LyncLastActive);
      if (chuckLastActive < norrisLastActive)
        return 1;
      if (chuckLastActive > norrisLastActive)
        return -1;
      return this.sortByName(chuck, norris);
    }
  }
}

溶液

some.prototype.obj = {
  sortByName: function (a, b) {
    // omitted for solution
  },
  sortByLyncStatus: function(a, b) {
    // compare cases
    // default to name comparison
    return some.prototype.obj.sortByName(a, b);
  }
}

>this将引用大多数排序的窗口。除非您将 sortByName 定义为全局函数,否则它不会作为 this 上的方法存在。

您可以将其定义为函数而不是方法并直接调用它,如下所示:

var sortByName = function(a,b){};
var sortByLyncStatus = function(a,b){
    return sortByName(a,b);
}

最新更新