![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 25.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
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(); } }); Ten post edytował tristanei 27.07.2008, 12:27:45 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 603 Pomógł: 131 Dołączył: 24.07.2007 Skąd: Górny Śląsk Ostrzeżenie: (0%) ![]() ![]() |
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 Passpack ![]() 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;) -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.07.2025 - 01:51 |