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.
Názory k článku
ECMAScript 5.1
Re: vdaka
celé vláknoJen 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.
mělká kopie
celé vláknoJavaScriptu 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é.
Re: mělká kopie
celé vláknoKolikrat do roka takovou kopii potrebujes? Jinak samozrejme ty funkce tam jsou, ale jmenuji se jinak ;)
function copy(objToCopy) {
return JSON.parse(JSON.stringify(objToCopy));
}
Re: mělká kopie
celé vláknoTo 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.
Re: mělká kopie
celé vláknoPě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();
};
Re: mělká kopie
celé vláknono, 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
Re: mělká kopie
celé vláknoTvoje 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();
}
};
Re: mělká kopie
celé vláknoKdyž 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.
Re: mělká kopie
celé vláknoNe, 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
Re: mělká kopie
celé vláknoTato 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
Re: mělká kopie
celé vláknoTo 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