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); // 2W 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
personma metodęgreet. - Tworzymy nową funkcję
greetAlicez kontekstemthisustawionym napersonza pomocąbind(). - Kiedy
greetAlicejest wywoływana, kontekstthisodnosi się doperson, więcthis.nameto'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)); // 20W tym przykładzie:
- Funkcja
multiplyprzyjmuje dwa argumenty. - Tworzymy nową funkcję
double, która ma ustawiony pierwszy argumentana 2. - Kiedy
doublejest wywoływana, używa wartości2jako pierwszego argumentu i wartości przekazanej jako drugiego argumentu.

