Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem JavaScript - programujeme objektovo

nebudem sa tu moc rozpisovat(aj pre mna plati obmedzenie prispevku). naschval som nevytvaral zlozite objekty alebo metody, islo mi hlavne o princip. tak zaciname:
ako prve si vyvorime vlastny objekt. na to nam bude sluzit operator new a trieda Object
[js]myObj = new Object; // vytvorenie vlastneho objektu myObj[/js]
[js]myObj.myvar = "hello world"; // vytvorenie property(clenska premenna) pre myObj[/js]
[js]//vytvorenie vlastnej metody ako obycajnej funkcie:
function my_alert(pre)
{
alert(pre);
}[/js]
[js]// namapovanie funkcie my_alert ako metody moj_alert pre myObj
myObj.moj_alert = my_alert; [/js]
[js]// a nakoniec volanie metody moj_alert s parametrom myObj.myvar
myObj.moj_alert(obj.myvar);[/js]
pretoze ale funkcia my_alert je obycajna funkcia, je ju mozne volat aj ako normalnu funkciu a nemusi byt priamo viazana na objekt myObj. toto sa mi zda ako nevyhoda a lepsi sposob je vytvorenie tzv. anonymnej funkcie:
[js]/* vytvorenie anonymnej funkcie(znamej aj z Perlu) ako metody moj_alert.
syntax je: Function([arg1[, arg2[, ... argN]],] functionBody)*/
myObj.moj_alert = new Function("pre","alert(pre)");[/js]
tento sposob sa mi zda lepsi, lebo nie je mozne funckiu volat normalne(je neviditelna)
a je priamo zviazana s objektom myObj.
nabuduce vam ukazem, ako sa da aj v jazyku C(nie C++) pomocou struktur a pointrov na funkcie programovat "kvazi" objektovo.:-)

Předmět Autor Datum
Toš dobré.
Flash_Gordon 25.02.2006 21:13
Flash_Gordon
Toz a kde se strkaju mince? :-D
admix 25.02.2006 22:18
admix
No vytvaret slozitejsi funkce jako lambda-style mi prijde dost nesikovny, zejmena kvuli nutnosti esc…
Lukáš Mach 25.02.2006 22:18
Lukáš Mach
[js]var AJAX = { sendRequest: function (uri, handler) { AJAX.handler = handler; AJAX.http.open("GET…
Lukáš Mach 25.02.2006 22:20
Lukáš Mach
[js]// A ted je tu ukazka pouziti,jediny radek,ktery se skutecne AJAXu tyka // je ten,co zacina AJAX…
Lukáš Mach 25.02.2006 22:20
Lukáš Mach
ako sa u noveho objektu vytvara nova instancia objektu??? what??? pletieme si triedy s objektami. ob… poslední
IgorK 25.02.2006 23:12
IgorK

No vytvaret slozitejsi funkce jako lambda-style mi prijde dost nesikovny, zejmena kvuli nutnosti escapovani retezcu, pokud se uvnitr maji vyskytnout retezce (a ve kterem programu se nevyskytnou, ze) a jeste hur, pokud se uvnitr techto retezcu maji vyskytovat uvozovky. Mimoto editory v retezcich pochopitelne nezvyraznuji syntaxi.

Mimoto jak se u takhle definovaneho objektu vytvori nova instance toho objektu? Kde je konstruktor? To pak neni nic moc objektove orientovane programivani, spis mi pak prijde lepsi ulozit si ty funkce do pole, viz muj dalsi prispevek, ve kterem bude jako bonus funkcni priklad maleho jednoducheho rozhrani pro AJAX:

[js]var AJAX = {

sendRequest: function (uri, handler)
{
AJAX.handler = handler;
AJAX.http.open("GET", uri + '&nocache_please=' + Math.ceil(Math.random()*10000), true);
AJAX.http.onreadystatechange = AJAX.handleResponse;
AJAX.http.send(null);
},

handleResponse: function ()
{
if (AJAX.http.readyState == 4)
{
AJAX.response = AJAX.http.responseText;
AJAX.handler(AJAX.response);
}
},

getHTTPObject: function ()
{
var xmlhttp;
/*@cc_on
@if (@_jscript_version >= 5)
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@else
xmlhttp = false;
@end @*/
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp = false;
}
}
return xmlhttp;
}
}

AJAX.http = AJAX.getHTTPObject();[/js]

[js]// A ted je tu ukazka pouziti,jediny radek,ktery se skutecne AJAXu tyka
// je ten,co zacina AJAX.sendRequest,ostatni slouzi jen ke grafickym
// hrackam. Dela to v mem eshopu to same,jako hvezdicky Gmailu

function onChangeStar(element, id)
{
AJAX.sendRequest('www....change-star.php?id=' + id, starChanged);
}

function starChanged(response)
{
response = response.split('|');
e = document.getElementById('star' + response[0]);
e.src = response[1];
}[/js]

ako sa u noveho objektu vytvara nova instancia objektu??? what??? pletieme si triedy s objektami. objekt je instancia triedy. cize novy objekt sa vytvara: [js]obj = new Object[/js]
, kde obj reprezentuje objekt a Object reprezentuje triedu. to co si pastol dole uz nema s objektovym programovanim nic spolocne aj ked sa mi ten tvoj priklad paci. :-) ale uznavam, ze nie je to objektove programovanie zname napr. ako v C++ a property constructor v JavaScripte nie je klasicky constructor a aj jeho pouzitie je divne v objektovom svete:
[js]y = new MyFunc;
if (y.constructor == MyFunc) ...[/js]

Zpět do poradny Odpovědět na původní otázku Nahoru