Przejdź do treści

Dodawanie metody do obiektu Function poprzez "addMethod"

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ą.

Baner promujący artykuł

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! 👋