当我尝试:
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吗?
答案 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