Funkcje w JavaScript to są obiekty, czyli posiadają swoje metody i właściwości.
Właściwość length
Właściwość length
funkcji zwraca liczbę jej zadeklarowanych parametrów.
function add(a, b) {
return a + b;
}
console.log(add.length); // 2
W powyższym przykładzie funkcja add
ma dwa parametry, więc jej właściwość length
wynosi 2.
Właściwość name
Właściwość name
funkcji zwraca nazwę funkcji. Zachowanie tej właściwości różni się w zależności od tego, czy funkcja jest zadeklarowana jako deklaracja funkcji czy jako wyrażenie funkcyjne.
Deklaracja funkcji
function greet() {
console.log("Hello!");
}
console.log(greet.name); // "greet"
W powyższym przykładzie nazwa funkcji greet
jest dostępna za pomocą właściwości name
.
Wyrażenie funkcyjne
Przykład anonimowego wyrażenia funkcyjnego
const greet = function() {
console.log("Hello!");
};
console.log(greet.name); // "greet"
W tym przypadku funkcja anonimowa przypisana do zmiennej greet
przyjmuje nazwę zmiennej jako swoją nazwę.
Przykład nazwanego wyrażenia funkcyjnego
const greet = function greetingFunction() {
console.log("Hello!");
};
console.log(greet.name); // "greetingFunction"
W powyższym przykładzie funkcja nazwana greetingFunction
jest przypisana do zmiennej greet
, a właściwość name
zwraca nazwę funkcji, czyli greetingFunction
.
Właściwość prototype
Każda funkcja w JavaScript ma właściwość prototype
, która jest używana głównie w kontekście programowania obiektowego do tworzenia obiektów za pomocą konstruktorów.
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name}`);
};
const alice = new Person('Alice');
alice.greet(); // "Hello, my name is Alice"
Metoda toString()
Metoda toString()
zwraca reprezentację kodu źródłowego funkcji w formie łańcucha znaków.
function add(a, b) {
return a + b;
}
add.toString();//'function add(a, b) {\n return a + b;\n}'
Metody call()
i apply()
Metody call()
i apply()
w JavaScript są używane do wywoływania funkcji z określonym kontekstem (this
) i argumentami. Obie metody pozwalają zmieniać kontekst this
funkcji.
call()
Metoda call()
wywołuje funkcję, podając najpierw kontekst this
, a następnie argumenty jako oddzielne wartości.
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'Alice' };
greet.call(person, 'Hello', '!'); // "Hello, Alice!"
W tym przykładzie funkcja greet
jest wywoływana z kontekstem person
, co sprawia, że this
wewnątrz funkcji odnosi się do obiektu person
.
apply()
Metoda apply()
działa podobnie do call()
, ale przekazuje argumenty jako tablicę.
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'Alice' };
greet.apply(person, ['Hi', '.']); // "Hi, Alice."
Metoda bind()
Metoda bind()
w JavaScript jest używana do tworzenia nowej funkcji, która, gdy jest wywoływana, ma przypisany określony kontekst this
oraz opcjonalnie początkowe argumenty. Metoda bind()
nie wywołuje funkcji od razu. Zamiast tego, zwraca nową funkcję, której kontekst this
jest związany (ang. „bound”) z podanym obiektem.
const person = {
name: 'Alice',
greet: function(greeting) {
console.log(greeting + ', ' + this.name);
}
};
const greetAlice = person.greet.bind(person);
greetAlice('Hello'); // "Hello, Alice"
W tym przykładzie:
- Obiekt
person
ma metodęgreet
. - Tworzymy nową funkcję
greetAlice
z kontekstemthis
ustawionym naperson
za pomocąbind()
. - Kiedy
greetAlice
jest wywoływana, kontekstthis
odnosi się doperson
, więcthis.name
to'Alice'
.
Używanie bind()
do przekazywania argumentów
Metoda bind()
pozwala również przekazać początkowe argumenty, które są automatycznie dołączane do argumentów nowej funkcji.
function multiply(a, b) {
return a * b;
}
const double = multiply.bind(null, 2);
console.log(double(5)); // 10
console.log(double(10)); // 20
W tym przykładzie:
- Funkcja
multiply
przyjmuje dwa argumenty. - Tworzymy nową funkcję
double
, która ma ustawiony pierwszy argumenta
na 2. - Kiedy
double
jest wywoływana, używa wartości2
jako pierwszego argumentu i wartości przekazanej jako drugiego argumentu.