Чтобы развернуть комментарий @ GerardoFurtado, значение this
в методе .find()
устанавливается равным вашему массиву.Так что у него есть и массив, и функция обратного вызова.Затем он в основном создает эквивалент типичного цикла for
и вызывает ваш обратный вызов в этом цикле, передавая каждый член.
Чтобы привести простой пример, создайте свой собственный метод .find()
.
// Be careful extending native prototypes
Array.prototype.myFind = function(callback) {
for (var i = 0; i < this.length; i++) {
if (callback(this[i], i, this)) {
return this[i]; // callback result was "truthy" so return this item
}
}
return undefined; // not found, so return undefined
}
const numbers = [43,46,33,23,44,36,5]
function under50(num) {
return num < 50;
}
const val = numbers.myFind(under50);
console.log(val);
Это довольно упрощенно и не демонстрирует все то же поведение, что и стандартный метод, но достаточно, чтобы показать, как использовать this
в качестве ссылки на объектдля которого был вызван метод.
Для полноты вы можете спросить, откуда JavaScript знает, что у вашего массива есть свойство (в данном случае метод) с именем find
.Очевидно, это не так.Но JavasCript будет искать find
в цепочке прототипов.Посмотрите:
const numbers= [43,46,33,23,44,36,5];
console.log("find" in numbers)