2017-01-24 2 views
4

Я общий новичок в JS, поэтому, пожалуйста, быть нежным со мной :)«точка функции» оператор в JavaScript

Я хочу, чтобы понять, где мы можем использовать оператор точки на некоторой переменной (в данном случае - массив), и когда мы не можем. рассмотрим следующий код:

//example 1 
function f1(x) { 
    return x*x; 
} 
console.log(map(f1, [1,2,3,4,5])); 
console.log([1,2,3,4,5].map(f1)); 

//example 2 
function f2(arr) { 
    return arr; 
} 
console.log(f2([1,2,3,4,5])); 
console.log([1,2,3,4,5].f2()); 

Я знаю примеры достаточно разные, но все же - в примере 1, работают как отпечатки (и печать то же самое) - даже при использовании синтаксиса array.function(..), в то время как в примере 2 второй печать вызывает ошибку. в основном, какая разница между ними и почему она работает только в примере 1?

и вообще - могу ли я применить этот метод к различным типам переменных (числа, булевы и т. Д.)?

+0

Чтобы выполнить другие ответы: https://stackoverflow.com/questions/948358/adding-custom-functions-i НТО-массив-прототип –

ответ

3

В первом примере вы используете функцию Array.prototype.map().

Эта функция может быть вызвана в 2 различными способами (смотрите документацию)

[1,2,3].map(function(x){ ... }): //In your case the callback function is *f1()* 

ИЛИ

arr.map(callback, [1,2,3]); 

Второй пример не работает, потому что класс Array не имеет функцию под названием f2()

1

[1,2,3,4,5] является экземпляром массива «класса», и что «класс» имеет map метод, поэтому следующий действительный код:

[1,2,3,4,5].map(f1) 

map метод может принимать любую функцию в качестве параметра, и вы передаете функцию f1. Он будет выполнен внутри функции map и выполнен как автономная функция.

Array «класс» не имеет f2 метод, поэтому это неверный код:

[1,2,3,4,5].f2() 

Здесь f2 выполняется немедленно и является частью [1,2,3,4,5] объекта

0

В первом случае , map определяется как глобальная функция и общественная функция Array. Поэтому вы можете называть это через map(arr) или arr.map(..)

Во втором случае, поскольку вы определили только функцию f2 как глобальную, что означает, что массив не может получить к ней доступ.

Смежные вопросы