Język JavaScript nie jest językiem obiektowym klasycznie, lecz prototypowo. Dodawanie metod do obiektu odbywa się w inny sposób niż jest to np. w Javie. Dlatego przez ogromną ilość programistów, którzy zaczynali od języka klasycznego transfer do składni JavaScript jest bolączką.
Przykład
function Carousel() {
this.run = function () {
// pass
};
}
Carousel.prototype.move = function () {
// pass
};
var carousel = new Carousel();
carousel.move();
Ale zamiast tego brzydkiego zapisu jakim jest Carousel.prototype.move Douglas Crockford zaproponował ładniejszy oraz bardziej naturalny zapis dodawania metod do obiektu, pomijając tym samym słowo kluczowe prototype. U niego metoda nazywa się method, a nazwę addMethod spotkasz np. w przykładach Johna Resiga.
Istnieje też stworzenie metody w obiekcie poprzez słowo kluczowe this, ale po utworzeniu obiektu będzie ono na sztywno przypisane z danym obiektem. Dlatego dodanie metody prototypowo zdecydowanie wykorzystuje pełną siłę języka.
Function.prototype.addMethod = function (name, func) {
this.prototype[name] = func;
return this;
};
Po dodaniu takiego rozwiązania do obiektu Function, dodawanie metod przedstawia się następująco:
function Carousel() {
this.run = function () {
// pass
};
}
Carousel.addMethod('move', function () {
// pass
});
var carousel = new Carousel();
carousel.run();
carousel.move();
Aktualizacja: 2026-09-26
Rozszerzanie wbudowanych obiektów, takich jak Function.prototype, jest dziś
uznawane za złą praktykę: łatwo o konflikt nazw z innymi bibliotekami albo
z przyszłą wersją języka. Od ES2015 metody dodaje się czytelnie bez
prototype dzięki składni class:
class Carousel {
run() {
// pass
}
move() {
// pass
}
}
const carousel = new Carousel();
carousel.run();
carousel.move();
Cya! 👋