Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
ECMAScript 5.1

dmkil
dmkil (neregistrovaný) ---.imafex.sk
16. 12. 2011 7:14 Nový

vdaka

celé vlákno

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.

Miloslav Ponkrác aura:75
18. 12. 2011 18:13 Nový

Re: vdaka

celé vlákno

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.

Pavel Křivánek aura:94
16. 12. 2011 10:08 Nový

mělká kopie

celé vlákno

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

Aichi
Aichi (neregistrovaný) ---.nokia.com
16. 12. 2011 12:01 Nový

Re: mělká kopie

celé vlákno

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));
}

Pavel Křivánek aura:94
16. 12. 2011 12:51 Nový

Re: mělká kopie

celé vlákno

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.

asdasd
asdasd (neregistrovaný) ---.cust.nbox.cz
16. 12. 2011 15:06 Nový

Re: mělká kopie

celé vlákno

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();
};
Pavel Lang aura:96
16. 12. 2011 22:59 Nový

Re: mělká kopie

celé vlákno

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

asdasd
asdasd (neregistrovaný) ---.cust.nbox.cz
16. 12. 2011 23:51 Nový

Re: mělká kopie

celé vlákno

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();
    }
};
BS-Harou
17. 12. 2011 14:32 Nový

Re: mělká kopie

celé vlákno

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.

Pavel Křivánek aura:94
17. 12. 2011 21:04 Nový

Re: mělká kopie

celé vlákno

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

Pavel Křivánek aura:94
17. 12. 2011 21:10 Nový

Re: mělká kopie

celé vlákno

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
asdasd
asdasd (neregistrovaný) ---.cust.nbox.cz
17. 12. 2011 23:16 Nový

Re: mělká kopie

celé vlákno

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

Zasílat nově přidané příspěvky e-mailem