PDA

View Full Version : سوال: خروجی توابع جاوا اسکریپت (توابع تودرتو)



abpsoft
شنبه 14 خرداد 1390, 16:45 عصر
سلام به همه دوستان عزیز
من یه سوال در مورد جاوااسکریپت دارم.

من یه قطعه کد جاوا اسکریپت دارم که یه تابع تعریف کردم.
داخل اون تابع، یه تابع دیگه تعریف کردم. (تابع تودرتو)

حالا من مقداری رو به تابع اصلی (والد) میدم. در وسطهای کد، تابع دوم تعریف میشه و متن دریافتی تابع اول رو بررسی می‌کنه. حالا اگر شرط درست بود، می‌خوام که مقداری رو برگردونه. البته نمی خوام توسط تابع دومی (فرزند) برگشت داده بشه.
بلکه می‌خوام که مقدار بر گشتی توسط تابع والد برگشت داده بشه و کد هم تموم بشه.

حالا اگر کسی می‌تونه کمکم کنه، «یاعلی». ممنون میشم

exlord
شنبه 14 خرداد 1390, 18:58 عصر
اگه کدتو میزاشتی خوب میشد ...من دقیقا نمیدونم به چه روشی شما نوشتی کدتو ... به چند حالت میشه ...
function funcParent(param) {
this.value = param;
function funcChild() {
var a = this.value + 10
return a;
}
return funcChild();
}

function funcParent(param) {
this.value = param;
var funcChild = function () {
var a = this.value + 10
return a;
}
return funcChild();
}

exlord
شنبه 14 خرداد 1390, 19:10 عصر
توجه داشته باشین که فانکش های تو در تو در واقع پیاده سازی ساختار OOP در js هستند ...
var Myclass = function (params) {
var privateVar = 10;
this.publicVar = 20;

function privateFunc() {
privateVar = params + 10;
}
this.publicFunc = function () {
this.publicVar = params + 10;
return this.publicVar;
}
}


var obj = new Myclass(20);
var a = obj.publicVar;
var b = obj.publicFunc();

abpsoft
شنبه 14 خرداد 1390, 21:33 عصر
سلام و تشکر از اینکه پاسخ دادین
فرض کنین که کد من مثل کد زیر است:
function funcParent(param) {
var funcChild = function () {
if(param=="return")
return "OK";
else
document.getElementById('show_here').innerHTML='Ex : Welcome To MySite';
}
}
یعنی من میخوام که وقتی تابع funcParent فراخوانی میشه، توسط تابع funcChild بررسی بشه. وقتی که شرط بررسی شد، یا مقداری برگردونه یا مقداری رو درون یه تگی با آیدی show_here نشون بده.
یعنی من می خوام که مثلاً OK توسط تابع funcParent برگشت داده بشه.

ممنونم

exlord
یک شنبه 15 خرداد 1390, 11:15 صبح
با اجرا شدن funcParent , متد funcChild اجرا نمیشه ... کافیه که به آخر funcParent یه return funcChild(); اضافه کنین ...
function funcParent(param) {
var funcChild = function () {
if (param == "return")
return "OK";
else
document.getElementById('show_here').innerHTML = 'Ex : Welcome To MySite';
}
return funcChild();//<------------------------------
}

abpsoft
یک شنبه 15 خرداد 1390, 13:01 عصر
من کدی که نوشتم رو بهتون نشون می دم. من می خوام که از آژاکس برای ارسال اطلاعات استفاده کنم. ارسال اطلاعات و دریافت رو به خوبی انجام میده.
کد من به این صورت کار می کنه که توسط تابع get_username من دستوراتی رو ارسال می کنم.
در مقدار ورودی تابع می خوام اگر متن return وارد شد، مقدار رو توسط تابع برگردونه و اگر چیزی جز return بود، فرض کند که تگی با آیدی متن ورودی در صفحه وجود دارد و مقدار برگشتی رو درون اون نشون بده.
بی زحمت اگر مشکلی نیست، خودتون تست کنین و بهم بگید.
ممنونم
function get_username(return_show)
{
var oXmlHttp = CreateXMLHttp();
oXmlHttp.open("GET", "process.php?id=1",true);
oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
oXmlHttp.onreadystatechange = function ()
{
if (oXmlHttp.readyState == 4)
{
if (oXmlHttp.status == 200)
{
if(return_show=='return')
{
return oXmlHttp.responseText;
}
else
document.getElementById(return_show).innerHTML=(oX mlHttp.responseText);
}
else
{
document.getElementById(return_show).innerHTML=("Ajax Error " + oXmlHttp.statusText);
}
}
};
oXmlHttp.setRequestHeader("Accept-charset","utf-8");
oXmlHttp.send(sBody);
}

exlord
یک شنبه 15 خرداد 1390, 15:51 عصر
اگه کدتو میزاشتی خوب میشد ...من دقیقا نمیدونم به چه روشی شما نوشتی کدتو ... به چند حالت میشه ...

توجه نمیکنی به این مسائل و وقت هردومونو تلف میکنی ...
این function داخلی یه EventHandler ه و بهد از اینکه readyState عوض شد اجرا میشه ... یه function معمولی نیست که بشه ازش چیزی return کرد ...