PDA

View Full Version : سوال: Chain کردن توابع در JavaScript



{mahdi}
چهارشنبه 07 خرداد 1393, 18:54 عصر
من تو چند تاپیک قبل یه سوال در مورد توابع پرسیدم ولی به یک سوالم پاسخ داده نشد .
من می خواستم ببینم چطور میشه توابع رو که دارای یک بازگشتی هم هستند به هم وصل کرد.

cups_of_java
چهارشنبه 07 خرداد 1393, 19:24 عصر
یه همچین سوالی بود که من جوابش رو داده بودم... شما با return this می تونی اینکار رو بکنی. اما بازگشت قضیه رو کمی پیچیده میکنه. شاید کار معقولی در مورد تابع بازگشتی نباشه Cascade کردن تابع.
یه مثال مشخص بزن برات بنویسم با توضیحش

{mahdi}
چهارشنبه 07 خرداد 1393, 21:39 عصر
بله قسمتی از مشکل با return this حل شد اما یه مشکل جدید رو به وجود آورد
لطفا به این دو تابع نگاه کنید.


function ge(i){ //select element by ID
if(document.all)
return document.all(i);
else if(document.getElementById)
return document.getElementById(i);
}
function setcss(obj,css){ //add css
if(typeof(obj)!='undefined'){
if(typeof(css)=='undefined')
css='';
obj.setAttribute('style',css);
}
}

من می خوام تابع setcss به تابع ge وصل بشه و من نیازی به فرستادن Object به تابع نداشته باشم
اگر ممکنه توضیحات کد رو هم برام بزارین تا متوجه بشم.
ممنون

hakan648
جمعه 09 خرداد 1393, 23:09 عصر
شاید همچین چیزی مدنظرتون باشه:

var DomHelper = function (elemId) {
var elem = document.getElementById(elemId);

return {
SetCss: function (css) {
elem.setAttribute('style', css);
return this;
},
AsHtml: function () {
return elem;
}
};
};

var elem = DomHelper('txt_username')
.SetCss('background-color: red;')
.AsHtml();

{mahdi}
جمعه 09 خرداد 1393, 23:44 عصر
و چطور میشه که این تابع رو در متغیر قرارندیم مانند جی کوئری باشه
مانند:
مثلا


$('#as')

و توابعی برای اضافه کردن سی اس اس داشته باشیم.
من نمی خوام توی اینجا مثلا تابعی به نام ashtml رو داشته باشم

hakan648
شنبه 10 خرداد 1393, 10:41 صبح
استفاده از تابع به دلیل ساختاری هست که جاوا اسکریپت داره، و موقع استفاده هم شما نیازی به فکر کردن در مورد اینکه کدتون به شکل تابع هست ندارید.
الانم دارید مثل jQuery کار میکنید، با این تفاوت که بجای علامت $ از یه نام استفاده کردیم.


من نمی خوام توی اینجا مثلا تابعی به نام ashtml رو داشته باشم
خب، نداشته باشید.

اگر هم خیلی دوست دارید مثل jQuery عمل کنید، میتونید سورسش رو بررسی کنید.


jQuery source viewer http://james.padolsey.com/jquery/
jQuery Deconstructed http://www.keyframesandcode.com/resources/javascript/deconstructed/jquery/