PDA

Դիտել ողջ տարբերակը : Կլասսները JavaScript-ում



shooter
12.09.2008, 19:53
C++ - ում հնարավոր ա հայտարարել ֆունկցիա, այնուհետև այդ ֆունկցիան կանչել " . " -ով օրինակ obj.func() : JS- ում էլ միայն պատրաստի ֆունկցիաներն ա հնարաովոր կանչել կետով, օրինակ document.write():
Հարց: հնարավոր ա մեր ստեղծած օբյեկտից կանչել մեր ստեղծած ֆոունկցիան կետով?

Egern.net
12.09.2008, 21:34
եթե օբյեկտին է պատկանում այդ ֆունկցիան (այսինքն էդ օբյեկտի method է), ապա կարելի է` obj.method(); ճիշտ ինչպես document.write()-ը :)

JS-ի համար տարբերություն չկա, թե դա ինչ օբյեկտ է` JS-ի built in օբյեկտ է, բրաուզերի սարքած օբյեկտն է (օր.` window), թե` քո գրած կոդով ստեղծված:

shooter
14.09.2008, 19:59
Օրինակ նման իրավիճակ
var a;
var b;
var c;
function construct(a, b, c){
this.a = a;
this.b = b;
this.c = c;
}
Ընդունենք ստեղծեցինք construct տիպ( չէ որ կլասի անունը և կոնստրուկտորի անունը պետք է նույնը լինի ), այնուհոտև
obj = new construct(10, 20, 30); - ստեղծեցինք օբյեկտ
ևս մեկ ֆունկցիա(կատարողական)
function show(){
t = a + b + c;
alert(t);
}
Այժմ ինչպես պիտի լինի
obj.show(); // --- ?

Egern.net
14.09.2008, 21:02
Ուրեմն...
Նախ գլոբալ փոփոխականներ իմաստ չունի տալ: Եթե կլասի հետ ես աշխատում, ամեն ինչ կատարվում է this-ի հետ:

function construct(a, b, c){
this.a = a;
this.b = b;
this.c = c;
}

function show(){
t = this.a + this.b + this.c;
alert(t);
}
Այժմ եթե "դրսում" ֆունկցիա ես ստեղծել (show()), և ուզում ես "կպցնել" կլասին, պիտի աշխատես կոնտրակտորի prototype-ի հետ:

construct.prototype.show = show;
էս դեպքում արտաքին show() ֆունկցիան դառնում է construct-ի համար method` show անվան տակ (անունները կարող են չհամընկնել): Իսկ show() ֆունկցիայի ներսում գրված this-ը աշխատում է որպես կլասսի this:

Հետո արդեն.

var obj = new construct(10,20,30);
obj.show();

shooter
18.09.2008, 20:06
Շատ շնորհակալ եմ մանրամասն բացատրելու համար, ոնցոր հասկացա, հեսա կփորձեմ.:ok

Egern.net
19.09.2008, 15:39
Խնդրեմ :)

hayk7
01.07.2009, 03:27
Բարևներ,

Մի հարց ունեմ կապվաց SetTimeout() Function–ի հետ, մի պրոբլեմի առաջ եմ կանգնել հիմա ու ոնց նայում եմ եմ ՎԵԲ–ում չեմ գտնւմ լուծումը կարող եք օգնել՞

ՕՐԻՆԱԿ՝

միհատ էջից կնոպկաի միջոցով նոր պատուհանա բացվում, որի մեջ կա form, textarea, 2 button (Submit, Cancel) odnoklassnik–ի հաղորդագրության նման,

1. Submit button-ի նշանակությունը այն է , որ սխմելուց հետո Submit անի form-ը և textarea–ի պարունակությունը ուղարկի սկրիպտին ու փակի պատուհանը, ամեն ինջ նորմալա մենակ երբ սեղմում ես Submit button–ը ինքը մեկ հասցնւմա Submit անի ու ուղարկի մեկ չէ։ Այսինքն, ոչ մի սխալ չի տեղի ունենում ուղղակի շատ արագա փակվում պատուհանը չի հասցնում ուղարկի։ Վորոշեցի օգտագործել SetTimeout() Function –ից , բայց ոնց գրում եմ չի աշխատում ճիշտ, մեկ ընդհանրապես չի փակում պատուհանը, մեկ սխալներովա աշխատում , մի խոսկով օգնեք լուծել պրոբլեմը եթե հնարավոր է։



$pm_alert = <<<HTML
<table style="border: solid 1px #999; position:absolute; top:510px; left:18px; width: 237px;" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="218" align="center" valign="top"><div id="message"></div>
<div style="title="{$lang['pm_mtitle']}" >{$lang['pm_atitle']}</div></div>
<div style="height: 225px; width: 218px;"><br />{$lang['pm_alert']}
<br /><br /><img src="/uploads/fotos/{$row['foto_name']}{$member_id['foto']}" width="100" style="margin-right:10px;" /><br />{$lang['pm_asub']} <b>{$row['subj']}</b><br />{$lang['pm_from']} <b>{$row['user_from']}</b></b></div><br />
<div align="center" style="width: 220px;">
<textarea style=" font-size:14px; font-family:Verdana, Helvica, Sans-serif; font-style:normal; border:0px;" name="txtMessage" cols="27" rows="18" readonly="readonly" id="message">{$row['text']}</textarea>
</div><br />

<div style="width:198px;"><FORM><INPUT TYPE="BUTTON" VALUE="{$lang['pm_aread']}" onclick="createPopup();"> <INPUT TYPE="BUTTON" VALUE="{$lang['pm_close']}" ONCLICK="window.location.href='javascript:location.reload();'"></FORM> </a></div><br /><br />
<div>
</div>
</div></td>
</tr>
</table>
<script language="Javascript" type="text/javascript">
function createPopup() {
//Get the data from the form fields

//Now create the HTML code that is required to make the popup
var content = "<html><head></head><body><form action='' method='post' name='answerForm'><table width='450' border='0' cellpadding='0' cellspacing='5'><tr><td><img src='/uploads/fotos/{$row['foto_name']}{$member_id['foto']}' alt='' name='imgPlaceholder' width='110' height='110' id='imgPlaceholder' /></td></tr><tr><td><label><strong>Nickname: </strong>{$row['user_from']}</label></td></tr><tr><td><label><strong>Subject:</strong> {$row['subj']}</label></td></tr><tr><td><textarea name='comments' id='comments' value='' cols='50' rows='10'></textarea></td></tr><tr><td align='right'style='padding-right:20px;'><input type='submit' name='btnSend' id='btnSend' value='Send' onclick='opener.focus();opener.location.href = opener.location;self.close();' />&nbsp;<input type='button' name='btnCancel' id='btnCancel' value='Cancel' onclick='window.close(this)'; /><input name='send' type='hidden' value='send' /></td></tr></table><input name='subj' type='hidden' value={$row['subj']} /><input name='name' type='hidden' value={$row['user_from']} /></form><br /></body></html>"

var pops = window.open("","window","resizeable,left=400,top=400,width=458,height=500"); //Create the popup
pops.document.write(content); //Write content into it.
pops.document.close();
pops.document.getElementById('comments').focus();
}


</script>


HTML;

shooter
01.07.2009, 21:14
setTimeout("anyFunction()", millisecond)

առաջին պարամետրով տրվող գործողությունը, կատարվում է երկրորդ պարամետրով տրված ժամանակ հետո, մեկ անգամ, ընդ որում առաջին պարամետրը պետք է գրված լինի " " - նշանների մեջ, երկրորդ պարամետրը կարող է լինել 1000ms = 1sec:
օրինակ.
setTimeout("window.close(this)", 3000)

hayk7
02.07.2009, 22:14
setTimeout("anyFunction()", millisecond)

առաջին պարամետրով տրվող գործողությունը, կատարվում է երկրորդ պարամետրով տրված ժամանակ հետո, մեկ անգամ, ընդ որում առաջին պարամետրը պետք է գրված լինի " " - նշանների մեջ, երկրորդ պարամետրը կարող է լինել 1000ms = 1sec:
օրինակ.
setTimeout("window.close(this)", 3000)

Շնորհակալ եմ պատասխանելու համար, բայց փորցեցի չաշխատեց... չի փակում պատուհանը, շատ շատ եմ չարչարվել ես հարցի շուրջ, ոչմեկ չի կարողացել մինջև հիմա գտնի աշխատող ճիշտ կոդը։

կոդը՝


onclick='opener.focus();opener.location.href = opener.location;setTimeout('window.close(this)', 3000);' />

shooter
03.07.2009, 21:26
Ճիշտ ասաց ես էլ սխալ չկարացի գտեմ, իսկ եթե ոչ թե open() մեթոդով պատուհան բացես այլ դու ինչ-որ դինամիկ պատուհան ստեղծես, ինձ թվում ա կստացվի:think

hayk7
04.07.2009, 18:31
Ճիշտ ասաց ես էլ սխալ չկարացի գտեմ, իսկ եթե ոչ թե open() մեթոդով պատուհան բացես այլ դու ինչ-որ դինամիկ պատուհան ստեղծես, ինձ թվում ա կստացվի:think

Օրինակ ոնց նայում եմ չեմ կարողանում հասկանալ թե odnoklassniki մեջ ոնցա սարքած էտ վիճակը, ընդեղ ինչ–որ true/false –ա տրվաց, որ message-էս ուղարկում ինքը էտա ստուգում ու նոր փակումա պատուհանը։ Իմ մոտ էտ պատուհանի փակոլու պրոբլեմը նրանիցա առաջացել, որ առանց ժամանակ տալու եթե փակում էս շատ ժամանակ չի հասցնում սաբմիթ անի ֆորմ–ի մեջի պարունակությունը, համոզված եմ , որ տվյալ դեպկում true/false –ով ետ խնդիրը լուծելը ավելի ճիշտա բայց հլա չեմ գտել ձևը թե ոնց կարելիա անել true/false–ով։