当我尝试时:
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