Javascript Array.prototype.find第二个参数thisArg不起作用

时间:2017-10-09 05:03:01

标签: javascript

我正在阅读一本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时。

1 个答案:

答案 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);