Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc w zrozumieniu kodu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
tristanei
Witam.
Chciałbym dokładnie zrozumieć poniższy kod. Proszę o wytłumaczenie osobę zdolną mi pomóc.
Kod
Passpack = new (function(){
        this.extend = function () {
            var a = arguments[0] || {};
            if (typeof a == 'object') for (var j in a) this[j] = a[j];
        };
        this.extend(arguments[0]);
    })({

    name: 'Passpack',
    version: 1.01,
    date: '2008-06-20',
    
    static: function(){
        this.extend = function () {
            var a = arguments[0] || {};
            if (typeof a == 'object') for (var j in a) this[j] = a[j];
        };
        this.extend(arguments[0]);
        if (typeof this._init === 'function') this._init();
    }

});
lord_t
Może tak trochę od środka, zacznijmy od:
Kod
function(){
        this.extend = function () {
            var a = arguments[0] || {};
            if (typeof a == 'object')
                for (var j in a) this[j] = a[j];
        };
        this.extend(arguments[0]);
    }


Mamy tu nienazwaną funkcję (formalnie*, bo logicznie to obiekt; nazwijmy ją sobie X) w której to:
-definiujemy funkcję extend(),a ona:
-tworzy zmienną lokalną a której wartosć będzie równa argumentowi przekazanemu do extend()
lub jeśli ta wartość nie istnieje to a będzie pustym obiektem: {}
-jeśli zmienna a jest obiektem to:
-dla jej każdej właściwości zostanie utworzona kopia w X (w polu o takiej nazwie jak w a)
-wywołujemy stworzoną przed chwilą funkcję extend z argumentem przekazanym do funkcji X

Teraz fragment:

Kod
    {
    name: 'Passpack',
    version: 1.01,
    date: '2008-06-20',
    static: function(){
        this.extend = function () {
            var a = arguments[0] || {};
            if (typeof a == 'object')
                for (var j in a) this[j] = a[j];
            };
        this.extend(arguments[0]);
        if (typeof this._init === 'function') this._init();
    }

}


Jednym słowem mamy tu stworzony obiekt (nazwijmy go P):
-z trzema właściwościami: name,version i date
-z jedną metodą(funkcją) o nazwie static - a konkretnie: to nasza funkcja X z jedną różnicą. Po przepisaniu wszystkich właściwości sprawdza czy właściwość _init jest funkcją, jeśli jest to ją wykonuje.

Teraz możemy zapisać cały kod tym pseudokodem:
Kod
Passpack = new (function X(){...}) (P);


(Tu nie jestem pewien, ale chyba:)
Można to teraz zapisać następująco..

Kod
Passpack = X(P);


..bo operator new stworzy nam instancję obiektu w nawiasie (czyli w sumie to funkcję X). Ową funkcję X od razu wywołujemy z paramterem P.

W wyniku tego wywołania otrzymamy obiekt który zostanie przypisany do globalnej zmiennej Passpacksmile.gif
Obiekt ten będzie miał te same składowe co P.

I to tyle
:] <- bo jestem zadowolony z analizy tego kodu. JS RULZ!;]

________
*JS jest specyficznym językiem; funkcje są też obiektami;)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.