Javascript 为什么我会得到一个;“未定义”;使用";从Find()返回值;这";论点
我正在学习Ethan Brown的“学习JavaScript”,有一个例子并没有达到应有的效果,我不确定到底出了什么问题。我正在处理的部分是使用find()方法搜索数组,而没有达到预期效果的部分涉及使用find()方法和“this”参数 我希望这个调用find(),它返回“daniel”Person: 要返回与调用find()相同的结果,该调用还应返回“daniel”Person: 相反,第一个find调用工作正常,但第二个返回“undefined”。为什么会这样 下面是完整的代码示例(摘自学习JavaScript的第8章-Ethan Brown): *注意本书使用ES6Javascript 为什么我会得到一个;“未定义”;使用";从Find()返回值;这";论点,javascript,Javascript,我正在学习Ethan Brown的“学习JavaScript”,有一个例子并没有达到应有的效果,我不确定到底出了什么问题。我正在处理的部分是使用find()方法搜索数组,而没有达到预期效果的部分涉及使用find()方法和“this”参数 我希望这个调用find(),它返回“daniel”Person: 要返回与调用find()相同的结果,该调用还应返回“daniel”Person: 相反,第一个find调用工作正常,但第二个返回“undefined”。为什么会这样 下面是完整的代码示例(摘自学习
class Person {
constructor(name) {
this.name = name;
this.id = Person.nextId++;
}
}
Person.nextId = 0;
const james = new Person("Jammes"),
juliett = new Person("Juliett"),
daniel = new Person("Daniel"),
jay = new Person("Jay");
const arr = [james, juliett, daniel, jay];
// option 1: find daniel id by direct comparison
// successfully returns daniel object
arr.find(p => p.id === daniel.id);
// option 2: find jay id by using "this" arg -
// should return daniel object, instead returns undefined...
arr.find(p => p.id === this.id, daniel);
从中继承它们的词汇绑定
否则,您不能使用或更改箭头函数的绑定,这正是您传入手动绑定时尝试执行的操作
尝试使用常规函数来记录差异
arr.find(function (p) { return p.id === this.id; }, daniel);
@4castle我只是在学习自己,但这是一个很好的解释。为了引用一些证据,这里是@4castle谢谢。只是在答案中添加了一堆链接,包括那个链接。啊,好吧,我很困惑,因为我使用了arrow函数作为另一个函数的参数,我不确定作用域是如何工作的。现在我很困惑!!!谢谢你的“这个”@Oka既然你知道这是怎么回事,也许可以在下一版本的书中向布朗先生提交一份勘误表?他在实际例子中使用的名字是杰米、朱丽叶、彼得和杰伊,我无缘无故地改变了他们。。。
class Person {
constructor(name) {
this.name = name;
this.id = Person.nextId++;
}
}
Person.nextId = 0;
const james = new Person("Jammes"),
juliett = new Person("Juliett"),
daniel = new Person("Daniel"),
jay = new Person("Jay");
const arr = [james, juliett, daniel, jay];
// option 1: find daniel id by direct comparison
// successfully returns daniel object
arr.find(p => p.id === daniel.id);
// option 2: find jay id by using "this" arg -
// should return daniel object, instead returns undefined...
arr.find(p => p.id === this.id, daniel);
arr.find(function (p) { return p.id === this.id; }, daniel);