Komentáře k článku

ECMAScript 5.1

ECMAScript 5.1 (ES5.1) je poslední verzí ECMAScriptu, standardu, na kterém je postaven JavaScript. Podobně jako u HTML5 je i ES5 standardizací existujících implementací a rozšíření jazyka. Jednou z nich je například strict mode, o němž jsme už psali. V článku si představíme některé další novinky verze 5.1.

Zpět na článek

12 komentářů k článku ECMAScript 5.1:

  1. dmkil

    vdaka

    Vdaka za clanok. V kombinacii s dojotoolkit-om a html5 mame uz v rukach solidne standardy na strane weboveho klienta. Este implementovat niektore dolezite akcie nad img: hlavne vyrez.

    1. alancox

      Re: vdaka

      Jen dotaz, odkdy je HTML5 standardem?

      Že by mi něco ušlo a HTML5 by měl svůj závazný jasně určený betonově stabilní standard?

      Považuji HTML5 do doby, než vyjde závazný a konečný popis hotového standardu za cokoli jen ne za standard.

  2. Pavel Křivánek

    mělká kopie

    JavaScriptu dost citelně (a nepochopitelně) chybí nativní funkce pro vytvoření mělké kopie objektu. Kopírování přes výčet vlastností je šíleně pomalé.

    1. Aichi

      Re: mělká kopie

      Kolikrat do roka takovou kopii potrebujes? Jinak samozrejme ty funkce tam jsou, ale jmenuji se jinak ;)

      function copy(objToCopy) {
      return JSON.parse(JSON­.stringify(ob­jToCopy));
      }

      1. Pavel Křivánek

        Re: mělká kopie

        To je potřeba v jednom kuse :-) Tahle operace je přeci pro prototypový jazyk naprostý základ. To se pak člověk nestačí divit, když nahodí profiler a zjistí, že mu taková blbost, jako kopírování objektů zabere třetinu času :-) Dnes je nejrychlejší si vytvořit funkci, ve které se ručně přehází všechny prvky objektu.

        Nehledě na to, že z hlediska zapouzdření by se měla (obecná) kopie objektu dělat tak, že si objekt vytvoří svoji mělkou kopii a té se pak zavolá něco jako postCopy, čímž si kopie objektu sama vytvoří hlubší kopii vybraných prvků bez toho, aby mezi původním objektem a jeho kopií musela probíhat nějaká další komunikace.

      2. asdasd

        Re: mělká kopie

        Pěkný řešení, ale nebude fungovat všude. Tohle je z hlediska kompatibility o něco lepší trik:

        Copy = function() {};
        copy = function(object) {
            Copy.prototype = object;
            return new Copy();
        };
        1. langpa

          Re: mělká kopie

          no, nápad dobrej, ale ještě by to chtělo asi uzavřít do closure:

          /* protoCopy - copy není přesně... */
          var protoCopy = function(obj) {
              var f = function() { };
              f.prototype = obj;
              return new f();
          };

          Stejně by mě ale zajímalo, jak tohle bude fungovat; prototype.prototype se určitě procházet nebude, takže to stejně asi není (dobré) řešení na všechno

          1. asdasd

            Re: mělká kopie

            Tvoje verze je o něco elegantnější, ale náročná na paměť, která se bude ukusovat s každým voláním. Původní verze by šla přepsat tak, že funkce copy bude používat sama sebe:

            copy = function(object) {
                if (arguments.length) {
                    var copy = arguments.callee;
                    copy.prototype = object;
                    return new copy();
                }
            };
            1. BS-Harou

              Re: mělká kopie

              Když už jsme u toho ES5, nešlo by jednoduše použít tohle:

              function copy(object) {
                  return Object.create(object);
              }

              Tak jako tak ale může vzniknout problém s hasOwnProperty na tomto novém objektu.

              1. Pavel Křivánek

                Re: mělká kopie

                Ne, tato funkce vytváří objekt s daným prototypem a vlastnostmi, nikoliv jeho kopii.

                var o1 = {a: 1, b: 2};
                var o2 = Object.create(o1);
                o1.a = 3;
                alert(o2.a) // vysledek je 3

        2. Pavel Křivánek

          Re: mělká kopie

          Tato funkce nevytváří skutečnou mělkou kopii objektu, používat ji za tímto účelem může vést k velmi zapeklitým chybám.

          Copy = function() {};
          copy = function(object) {
              Copy.prototype = object;
              return new Copy();
          };
          
          
          var o1 = {a: 1, b: 2};
          var o2 = copy(o1)
          o1.a = 3;
          alert(o2.a) // == 3
          1. asdasd

            Re: mělká kopie

            To je vlastně pravda. Ještě by to šlo takhle :-)

            o1 = {a: 1, b: 2};

            o2 = copy(o1);
            o1 = copy(o1);

            o1.a = 3;
            alert(o2.a); // == 1

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://zdrojak.cz/?p=3586