使用'这个' in forEach()或sort()

时间:2018-01-18 07:55:16

标签: javascript

当我尝试:

employeesList.contains(employee2)

js throws:this.idSortOrder未定义。 但是当我尝试时:

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

    });

它有效。任何人都可以直接在sort或foreach函数中告诉我如何使用this.idSortOrder吗?

4 个答案:

答案 0 :(得分:2)

出现此问题是因为回调中的this不是您期望的那个(在严格模式下它是undefined,松散模式下的全局对象)。您可以使用arrow function来保留它。

替换

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) {

答案 1 :(得分:1)

您还可以使用.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));

这将使你的内心更接近于外部的上下文。

答案 2 :(得分:1)

  

"这"函数内部并没有指向与&#34相同的对象;这个"出现在函数之外,这就是我们无法访问" idSortOrder"财产Look at this description   ,试试这个:

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;
  }
});

答案 3 :(得分:1)

我喜欢@ answers的回复,但是为了更广泛的支持,每个人都提供传递此参数的选项。所以会建议那样做。

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

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