在 forEach() 或 sort() 中使用 'this'



当我尝试时:

    this.rezerwacjeFilteredByseaarchInput.sort(function (a, b) {
      if (this.idSortOrder) {
        return a[0].id - b[0].id;
      }
      else {
        return b[0].id - a[0].id;
      }
    });

js throws: this.idSortOrder is undefined.但是当我尝试时:

let idSortOrder = this.idSortOrder;
    this.rezerwacjeFilteredByseaarchInput.sort(function (a, b) {
      if (idSortOrder) {
        return a[0].id - b[0].id;
      }
      else {
        return b[0].id - a[0].id;
      }
    });

任何人都可以告诉我如何直接在sort或foreach函数中执行此操作.idSortOrder吗?

出现

此问题是因为回调中的this不是您所期望的(它在严格模式下undefined,全局对象处于松散模式(。您可以使用箭头函数来保留它。

取代

this.rezerwacjeFilteredByseaarchInput.sort(function (a, b) {

this.rezerwacjeFilteredByseaarchInput.sort((a, b) => {

或者,如果您需要与旧浏览器兼容并且无法使用像 Babel 这样的转译器,只需存储this

var nameThatObject = this;
this.rezerwacjeFilteredByseaarchInput.sort(function (a, b) {
      if (nameThatObject.idSortOrder) {

您也可以使用 .bind

this.rezerwacjeFilteredByseaarchInput.sort(function (a, b) {
  if (this.idSortOrder) {
    return a[0].id - b[0].id;
  }
  else {
    return b[0].id - a[0].id;
  }
}.bind(this));

这会将你的内在环境绑定到更接近外部环境。

函数内部的"this">

与函数外部存在的"this"不指向相同的对象,这就是我们无法访问"idSortOrder"属性的原因 看看这个描述 ,而是尝试这个:

var self = this;
this.rezerwacjeFilteredByseaarchInput.sort(function (a, b) {
  if (self .[enter link description here][1]idSortOrder) {
    return a[0].id - b[0].id;
  }
  else {
    return b[0].id - a[0].id;
  }
});
我喜欢

@answered的响应,但为了更广泛地支持Each,确实提供了传递此参数的选项。所以会建议在这种情况下这样做。

arr.forEach(function callback(currentValue[, index[, array]]) {
    //your iterator
}[, thisArg]);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

最新更新