我正在阅读一本JavaScript书籍,并找到了有关如何使用arr.find(callback[, thisArg])
class Person {
constructor(name) {
this.name = name;
this.id = Person.nextId++;
}
}
Person.nextId = 0;
const jamie = new Person("Jamie"),
juliet = new Person("Juliet"),
peter = new Person("Peter"),
jay = new Person("Jay");
const arr = [jamie, juliet, peter, jay];
// option 2: using "this" arg:
arr.find(p => p.id === this.id, juliet); // returns juliet object
我无法得到理想的结果。每次find()
返回undefined
时。
答案 0 :(得分:2)
您正在使用arrow
函数,这些函数可以保留词法作用域。箭头函数中的this
变量代表window
,而不是您传递的juliet
参数。
要解决此问题,您只需使用function
创建新范围并将juliet
作为this
传递。
class Person {
constructor(name) {
this.name = name;
this.id = Person.nextId++;
}
}
Person.nextId = 0;
const jamie = new Person("Jamie"),
juliet = new Person("Juliet"),
peter = new Person("Peter"),
jay = new Person("Jay");
const arr = [jamie, juliet, peter, jay];
// option 2: using "this" arg:
let a = arr.find(function(p) {
return p.id === this.id;
}, juliet);
console.log(a);