PDA

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



se8820726
دوشنبه 20 شهریور 1391, 02:05 صبح
سلام به تمامی دوستان

آقا من میخوام ساختار فایل های مرجع jquery رو بفهمم
هیچ جاییم پیدا نکردم که راجع به ساختارشون توضیح داده باشه
سر همین اومدم یه سوال مربوط به توابع javascript اینجا مطرح کردم


( function(a) { alert(a) }) (b);


آیا این یه تعریف تابع با نام b هست؟
این b اینجا نقشش چیه؟
چچوری میتونم دستورات داخل تابع رو اجرا کنم؟

Variable
دوشنبه 20 شهریور 1391, 19:54 عصر
b به عنوان پارامتر به تابع بی نامی که در درون دو پرانتز تعریف شده . ارسال میشود.

اگه توجه کنید. شما دو جفت پرانتز میبینید ()()
که درون جفت اول یک تابع بی نام تعریف شده .
اما جفت دوم در اینجا عملگر اجرای تابع است. تایعی که درون جفت اول تعریف شده .
جفت پرانتز دوم یعنی مانند همه توابع دیگر عمل میکند . مثلا alert(a)
اینجا این جفت پرانتز همان عملگر اجرای تابع است که یک پارامتر برای استفاده در تابع را میگیرد

خب مشکل اصلی در درک . جفت پرانتز اول است که یک تابع را در خود دارد. این تابع داری نام نیست .
کلا توابع بینام را نمیتوان فراخوانی کرد. چرا که نامی ندارند تابتوان از طریق نام آنها را فراخونی کرد وبهشون دسترسی داشت.
در اینجا شما میتونی یک تابع بی نام رو بلافاصله تعریف وبعد توسط پرانتز های عملگر اجرا تابع اون رو اجرا کنی.
شما میتونید. معادل دستور بالا رو در نظر بگیری که به صورت زیر میشه . شاید متوجه بشی .

var haveName=function(a){
alert(a)
}

haveName(b);

(haveName)(b)

در اینجا یک تابع تعریف شده . که به دو صورت فراخونی شده .

کلید درک اینجور توابع در جاوااسکریپت در فهم (توابع بی نام ) هست

se8820726
سه شنبه 21 شهریور 1391, 21:53 عصر
خیلی ممنون از پاسختون
داداش این یعنی چی:

b: function(a) { alert(a); }

Variable
سه شنبه 21 شهریور 1391, 22:13 عصر
این خط من فکرمیکنم درستش


{
b: function(a) { alert(a); }
}


اینجا یعنی یک شئی که دارای یک متد به نام B هست .

se8820726
جمعه 24 شهریور 1391, 00:53 صبح
سلام دوست عزیز ممنون از پاسخت
من سعی کردم با توجه به این نوع تعریف متد یه تابع بنویسم اما عمل نکرد.
میشه منو راهنمایی کنید؟

<!DOCTYPE html>
<html>
<head>
<script>

function a()
{
b: function() { alert("hi"); }
}

</script>
</head>
<body>

<input type="button" onclick="a.b()">

</body>
</html>

Variable
جمعه 24 شهریور 1391, 18:50 عصر
شماتوجه نکردید؟
اون پست قبلی که دادم . گفتم که یک شئی...
شما اول باید یک شئی بسازی.
بعد براش متذ و صفت تعریف کنی.مثلا.

var a={
b:function(msg){
alert(msg);
}
}
a.b('Hello World');

در اینجا با استفاده از } { یک شئی ساختم به نام a .
که درونش یک متد تعریف کردم به نام b .
بعد دز بیرون از تابع . بهمراه نام شئی . یک نقطه گذاشتم و بعد متد رو فراخونی کردم .
با مقداری که بهش دادم

oskarbid1
شنبه 25 شهریور 1391, 17:24 عصر
سلام

نمیدونم اینجا جای پرسیدن این سوال هست یا نه اما ممنون میشم کمکم کنید

یه کد تبلیغات پاپ آپ برای سایت می خوام به کدی نیاز دارم که توسط مرورگرها بلاک نشه؟ آیا چنین کدی هست؟ چیکار باید کرد از کجا می تونم بگیرم؟

ممنون(فوری)

se8820726
سه شنبه 28 شهریور 1391, 02:52 صبح
سلام
دوستان من در حین مطالعه ساختار یه صفحه وب به یه نوع فراخوانی تابع به این شکل برخوردم و اصلا نفهمیدم این چه جور اجرا میشه
کد تعریف تابعشم پیدا نکردم که ببینم اصلا نحوه تعریف این نوع تابع چه جوریه

a( "b1" , {"c1":"d1" , "c2":[]} , "b2":{"c3":"d3" , "c4":[{ "e1":"f1" , "e2":"f2" }] } );


الان اون a که خوب اسم تابعه هیچ.
اون b1 هم که آرگومان اول هستش
اما دیگه بعد از اونو نفهمیدم که کدوما آرگومان هستند؟
مقادیر داخل آکولاد یعنی چی؟
مقادیر داخل براکت به معنی چیه؟
اصلا نحوه تعریف یه تابع به این شکل چجوریه؟

لطفا دوستان راهنمایی کنند

Variable
سه شنبه 28 شهریور 1391, 08:19 صبح
نحوه تعریفش خیلی سادس
در کل من به شما پیشنهاد میکنم . مبحث شی Object در جاوااسکریپت مطالعه کنی. برای همه سوالاتی که داری جواب پیدا میکنی


function a(para1,para2,para3){

}


a( "b1"
,{"c1":"d1" , "c2":[]}
,"b2":{
"c3":"d3"
,"c4":[{
"e1":"f1"
,"e2":"f2"
}]
}
);

se8820726
سه شنبه 28 شهریور 1391, 10:23 صبح
آقا من نفهمیدم که الان این قسمتایی که تو آکولاد نوشته شدن واسه چی هستن و معنیش چیه!
داداش میشه یه مرجع خوب که اینارو توضیح داده باشه بهم معرفی کنی. آخه من چیزی که اینارو توش توضیح داده باشه پیدا نکردم.

Variable
سه شنبه 28 شهریور 1391, 11:41 صبح
ببینید . شما هرنوع داده ایی رو میتونید به عنوان پارامتر به تابع بفرستی
. مثلا عدد. رشته .... گاهی هم میتونی یه ساختار داده ایی بفرستی . مثله ارایه . مثله شی.
خب شما اگه مفهومه و نحوه پیاده سازی آرایه و شی رو بدونید. خیلی بهتون کمک میکنه مثلا :


//Array
var arr=['mohsen','ali','mohammad','majid'];

//Object
var obj={
'keyName':'keyValue',
'attribute':'value',
'method':function(){

}
}

در ارایه شما فقط مقدایر رو در خانه های ارایه داری . وبرای دسترسی بهشون باید از شماره هایی که ایندکس نام دارند و معادل هر مقدار هست استفاده کنی.
در شی . شما داده هاتون به صورت جفتهای key:value ذخیره میشه. تفاوتش با ارایه اینه که شما خودتون ایندکس ها رو تعریف میکنید.( همون key)
خب چه در ارایه چه در شی . شما میتوانید یک تابع . به عنوان مقدار داشته باشی. که در این مثال من میتونی ببینی..

حالا شما میتونی تابعی تعریف کنی که این ساختارهای داده ایی (شئ و ارایه ) رو به عنوان پارامتر بهش ارسال کنی. مثلا

function myFunc(str,fArr,fObj){

alert( str );
alert( fArr[0] );
alert( fObj['keyName'] );
// OR
alert( fObj.keyName )
}

حالا اگه من این تابع رو اینجوری فراخونی کنم

myFunc('variable',arr,obj);

شما باید 4 تا پیغام ببینی
که نتایج زیر رو داره :
بار اول رشته "variable"
بار دوم رشته "mohsen"
بار سوم و چهارم رشته "keyValue" : که اینجا نحوه استفاده از شی رو به دو صورت گفتم

شما میتونی از متد درون شی هم به صورت زیر استفاده کنی
()obj.method
که یه تابع اجرا میشه .

اما شما در اون پست قبلی میبینی که اشیا درون فراخوانی تابع قرار دارند.
که در این حالت نویسنده تابع به جای تعریف چداگانه شی و بعد استفاده از اون ( کاری که من کردم)
اومده و شی رو مستقیم به تابع فرستاده
یعنی در مثال من میشه


myFunc('variable'
,['mohsen','ali','mohammad','majid']
,{
'keyName':'keyValue',
'attribute':'value',
'method':function(){}
}
);


توجه کنید که شما میتونید مقادیرتون در شی . از ارایه تشکیل شده باشه . مثلا


var obj={
'keyName':'keyValue',
'attribute':'value',
'method':function(){ alert('helloWorld!!!') },
'mArr':['a','c','Hello']
}


این برای مطالعه خوبه (http://www.packtpub.com/object-oriented-javascript-applications-libraries/book)