abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 03:00 | Zajímavý software

    Erin Catto, autor open source 2D fyzikálního enginu Box2D (Wikipedie), představil nový 3D fyzikální engine Box3D. Engine je již používán ve hře The Legend of California.

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    Byla vydána nová verze 4.0.0 multiplatformního svobodného frameworku pro zpracování obrazu G'MIC (GREYC's Magic for Image Computing, Wikipedie). Přehled novinek i s náhledy nových filtrů na PIXLS.US.

    Ladislav Hagara | Komentářů: 0
    včera 14:22 | Zajímavý článek

    Český statistický úřad (ČSÚ): Průměrná hrubá měsíční mzda ICT specialistů v roce 2025 meziročně vzrostla o 6 % na téměř 100 tisíc korun. Nejlépe placeni byli vývojáři softwaru. Dlouhodobým trendem zůstává nízké zastoupení žen, a to jak mezi specialisty, tak studenty těchto oborů.

    Ladislav Hagara | Komentářů: 8
    včera 14:11 | IT novinky

    Ochranný svaz autorský (OSA) připravuje žalobu na společnost Suno, která umožňuje generování hudby pomocí umělé inteligence (AI). ČTK to sdělil předseda představenstva OSA Roman Strejček. Suno podle něj bez souhlasu využívá k trénování svých modelů hudbu autorů, které svaz zastupuje. Nedávný investigativní materiál magazínu The Atlantic ukázal, že firmy jako Suno nebo Udio k trénování modelů používají rozsáhlé databáze obsahující miliony skladeb. V databázích, které časopis zveřejnil, lze dohledat i písně řady českých a slovenských umělců.

    Ladislav Hagara | Komentářů: 2
    včera 13:33 | Komunita

    Byl publikován přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Vyřešen byl problém s macOS 27 Golden Gate. Vývoj lze podpořit na Open Collective a GitHub Sponsors.

    Ladislav Hagara | Komentářů: 0
    včera 12:55 | IT novinky

    EU dnešním dnem zavedla clo ve výši 3 eur na balíky nízké hodnoty dovážené ze zemí mimo EU. To zahrnuje širokou škálu výrobků běžně nakupovaných on-line, jako jsou oděvy, hračky, elektronika a další spotřební zboží v hodnotě až 150 EUR.

    Ladislav Hagara | Komentářů: 4
    včera 08:55 | Nová verze

    Vyšel Redmine 7.0, jeden z nejlepších open source ticketovacích systémů. Došlo k migraci na Rails 8, vylepšení UI/UX, Workflow, byla přidána podpora náhledu pro Microsoft Office a LibreOffice dokumenty, došlo k výkonnostním optimalizacím a přibylo spoustu dalších oprav a novinek. Více informací v oficiálním oznámení.

    Max | Komentářů: 0
    30.6. 16:22 | Zajímavý článek

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 166 (pdf).

    Ladislav Hagara | Komentářů: 0
    30.6. 03:33 | Pozvánky

    Blíží se prázdniny a než se rozutečete k moři, je na čase se opět sejít na Virtuální Bastlírně - pravidelném setkání elektroniků, ajťáků, bastlířů a obecně nadšenců do techniky. Co si pro vás strahovští bastlíři připravili tentokrát? Určitě proberou blížící se Linux Days i další události. U softwaru se chvíli zdrží a poví si kupříkladu o tom, jak se zbavit Bambu Cloudu, ale nepřijít o možnost ovládat tiskárnu na dálku. Řeč dojde i na AI,

    … více »
    bkralik | Komentářů: 0
    30.6. 03:22 | Nová verze

    Vývojáři postmarketOS vydali verzi 26.06 tohoto operačního systému pro chytré telefony vycházejícího z optimalizovaného a nakonfigurovaného Alpine Linuxu s vlastními balíčky. Přehled novinek v příspěvku na blogu. Na výběr jsou 4 uživatelská rozhraní: GNOME, KDE Plasma Mobile, Phosh a Sxmo.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (17%)
     (31%)
     (4%)
     (6%)
     (2%)
     (16%)
     (26%)
    Celkem 2032 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Implementace super() v JavaScriptu

    11.10.2011 00:35 | Přečteno: 1362× | Linux | Výběrový blog | poslední úprava: 11.10.2011 00:39

    Dlouho jsem tu nic nenapsal, to ale neznamená, že abíčko nesleduji. Chybí mi tu ale víc programátorských blogů, tak to zkusím sám napravit.

    V JavaScriptu postrádám Python-style volání super při použití dědičnosti. Proto jsem si napsal vlastní řešení. Až potom jsem našel, že existují podobné implementace.

    JavaScript nemá syntaktickou podporu pro vytváření tříd. Proto si nejprve implementujeme jednoduchý class-builder. Prefix $ jsem zvolil pro zdůraznění systémovosti.

    var $class = function(fn, fn2) {1
        if(fn === undefined) {
            return function () {};
        } else if(fn2 === undefined) {
            fn2 = function () {
                fn.apply(this, arguments);
            };
        }
    
        for(var i in fn.prototype) {
            fn2.prototype[i] = fn.prototype[i];
        }
    
        return fn2;
    };
    

    Helper funkce $class nám umožní vytvářet třídy 3 způsoby.

    1) První způsob volání $class se neliší od prostého var Animal = function() {};

    var Animal = $class();
    
    Animal.prototype.sayHello = function() {
        alert("I'm animal");
    };
    
    var myAnimal = new Animal();
    
    myAnimal.sayHello();
    

    2) Druhý způsob volání $class umožňuje vytvořit třídu s konstruktorem:

    var Animal = $class(function () {
        alert('Initializing animal...');                                                                                                                                                                       
    });
    

    3) Konečně poslední způsob volání $class je vytváření tříd děděním.

    var Dog = $class(Animal, function() {
        alert('Initializing dog...');
    });
    
    
    Dog.prototype.sayHello = function() {                                                                                                                                                                      
        alert("Hi, I'm dog");
    };
    
    var myDog = new Dog();
    
    Problém nastane, pokud potřebujeme volat z jakéhokoliv místa konstruktoru Dog i konstruktor Animal. To samé pro metodu sayHello. V Pythonu prostě na správném místě voláme super a je to.
    super(Dog, self).__init__()
    super(Dog, self).sayHello()
    

    V JavaScriptu si super naimplementujeme takto:

    var $super = function(fn, $this) {
        return function() {
            return fn.apply($this, arguments);
        };
    };
    

    Použitím helper funkce $super získáme přístup k metodám předka. Funkce $super samozřejmě umožňuje předávat i argumenty.

    var Dog = $class(Animal, function() {
        alert('Initializing dog...');                                                                                                                                                                          
    
        $super(Animal, this)();
    
        alert('Dog initialized');
    });
    
    Dog.prototype.sayHello = function() {
        alert("Hi, I'm dog");
    
        $super(Animal.prototype.sayHello, this)();
    
        alert("Goodbye, dog!");
    };
    

    To je vše, pokud budou následovat další blogy, budou především o Pythonu, který je můj chlebodárce :-)

           

    Hodnocení: 62 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    11.10.2011 10:00 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Proč do Javascriptu dodělávat Pythoviny jako super() a __init__ a nepoužít raději pyjamas? Z myšlenky psát webovou aplikaci v jednom jazyce, který umím (tím odpadá server side Javascript), jsem docela nadšený.
    When your hammer is C++, everything begins to look like a thumb.
    11.10.2011 11:07 diverman
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Dal jsem pyjamas 2 minuty a nezjistil jsem, jak funguje. Ve FAQ je na vsechno odpoved No/Nope. Jo zaregistroval jsem cosi o Python to JavaScript compileru-no to jsem se lekl. O server side JS v mem blogu nepadlo ani slovo, jak jsi na to prisel? Popravde-nikdy by me nenapadlo na server cpat JS.

    Odpoved na otazku proc? Protoze se muzes dostat do situace, kdy si nemuzes vybirat, v cem to budes delat, jaky knihovny muzes pouzit. Tady mas python, v prohlizeci mas JS, tak ukaz co umis.
    11.10.2011 19:28 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Pyjamas je překladač pythonu do javascriptu. Plus nějaké ty widgety a ajax. Principem je, že celou stránku prostě člověk napíše v Pythonu a přeloží do kombinace HTML+Javascript pro prohlížeč.
    O server side JS v mem blogu nepadlo ani slovo, jak jsi na to prisel? Popravde-nikdy by me nenapadlo na server cpat JS.
    Protože psát aplikaci v X jazycích je prostě opruz :-)

    Mimochodem, docela hezký Hello world je ve web2py book: JSONRPC a Pyjamas
    When your hammer is C++, everything begins to look like a thumb.
    11.10.2011 10:22 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Nepoužívejte dědičnost a nemusíte řešit super :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    Konqui avatar 11.10.2011 11:14 Konqui | skóre: 18 | blog: Konqui | Rožnov pod Radhoštěm
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    V Pythonu se mi volání super() dost hnusí, na JS je IMHO lepší použít framwork DoJo, který podporuje dedičnost a další OOP prvky
    Open/save dialogy z GTK+ jsou nejkřiklavější ukázkou toho nejdebilnějšího software, co vůbec může existovat.
    mess avatar 11.10.2011 14:03 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Osobně se mi víc líbí tento přístup.
    Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
    11.10.2011 14:20 diverman
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Co se ti na nem libi vic, mohl bys byt konkretnejsi?
    mess avatar 11.10.2011 18:32 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Použití je takové příjemnější, například místo $super(Animal.prototype.sayHello, this)(); použiješ ve funkci sayHello toto:this._super();. "Třída" vznikne takto:
    var Animal = Class.extend({
    // members
    });
    Odvozená třída vzniká takto:
    var Dog = Animal.extend({
    // members
    });
    
    Čistě osobní pocity :-)
    Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
    11.10.2011 17:54 pozortucnak | skóre: 21 | blog: vecny_windowsar
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Kontrolní otázka: je tu nějaké javascript IDE které je schopno u objektů vytvořených pomocí frameworků typu dojo, mootools... doplňovat metody?
    Jsem mimořádně obtížný případ
    mkoubik avatar 11.10.2011 21:06 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Cloud 9 IDE.
    12.10.2011 09:31 Adam
    Rozbalit Rozbalit vše Re: Implementace super() v JavaScriptu
    Kdyz mate rad Python, tak tohle znate?

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.