Syntax یک دستور جاوا اسکریپت

D.A.V.O.O.D

Member
سلام
من اگه بخوام دستوری به شکل زیر باشه :

HTML:
Name( 'Davood' ).MSG( 'Salam' )

ونتیجه اون هم به شکل زیر باشه :

HTML:
alert( 'Davood Salam' );

این دستور رو باید چجوری بنویسم ؟

پیشاپیش ممنون
 

foranyone

Well-Known Member
سلام
من اگه بخوام دستوری به شکل زیر باشه :

HTML:
Name( 'Davood' ).MSG( 'Salam' )
ونتیجه اون هم به شکل زیر باشه :

HTML:
alert( 'Davood Salam' );
این دستور رو باید چجوری بنویسم ؟

پیشاپیش ممنون

من از دستور اولت سر در نیاوردم ولی چرا یه تابع نمی نویسی که ورودی های رو بگیره و داخلش ترکیب کنه و

alert بده ؟
 

D.A.V.O.O.D

Member
من از دستور اولت سر در نیاوردم ولی چرا یه تابع نمی نویسی که ورودی های رو بگیره و داخلش ترکیب کنه و

alert بده ؟

می خوام دستوراتم رو مثل JQuery در بیارم .
حالا alert مثاله ، من کلا می خوام بدونم چنین دستوری رو چجوری می نویسند ؟
 
این کاری که میخواید انجام بدین یه کار oop با js هستش.من یه نمونه میزارم.اگه بازم چیزای بیشتری خواستین بگین تا دوباره بنویسم :
HTML:
function davood(nm){
this.name=nm;
this.msg=function (mes){
alert(mes+" "+this.name);
}
}
var name=new davood("davood");
name.msg("salam");
 

D.A.V.O.O.D

Member
سلام
چیزی که من می خوام دقیقا همون OOP هست اما شما منظور من رو خوب نگرفتی ( یا حداقل مثال خوبی نزدی ) .
ببین من می خوام ، مثلا اگه توی یه DIV با ID = MyDiv می خوام بنویسم Davood از دستوز زیر بنویسم ، دقیقا مثل JQuery :

HTML:
DIV( 'MyDiv').HTML( 'Davood' );

ممنونم بابت کمکت
 
بیا آقا داوود!به اسم خودت هم نوشتمش که بشه همون مثال اولیت :
HTML:
function davood(nm){
var tmp=new Object;
tmp.name=nm;
tmp.msg=mesage;
return tmp;
}
function mesage(mes){
alert(mes+" "+this.name);
}
davood("davood").msg("salam");
خوشحالم که حداقل یکنفر پیدا شد یه بفکر اینجور چیزا بیوفته.اگه بازم سوالی بود من فعلاً همین دور و بر دارم چرخ میزنم.اگه چیز بزرگی داری مینویسی کمک خواستی من هستم.
 

D.A.V.O.O.D

Member
ممنون دنی جان ، منظور من استفاده از اسم Davood نبود :D
می خواستم مثل مثال آخرت هر دو تا آرگومان داشته باشند ، مثال اول شما اینطوری نبود . ممنونم ازت ، اگه بازم جایی گیر کردم ، می یام می پرسم .

ممنون :rose:
 

eAmin

Well-Known Member
سلام.

روشی که داوود مدنظرش هست دقیقا همون روشی هست که بنده هم در فریم ورکی که الان دارم روش کار می کنم پیاده سازی کردم.
به این روش اصطلاحا بهش می گن Chaining و فریم ورک یا کتابخانه ای که از این روش بهره ببره بهش می گن Chainable نه تنها jQuery بلکه MooTools و Dojo و حتی PrototypeJS هم از این روش استفاده می کنن!

تا حدودی دوست خوبمون dannydolph جان به این موضوع اشاره کردن :)

بزارید یه خرده در اینباره توضیح بدم، لازمه ی اینکار اینه که شما در متدهای شئ تون همیشه متد قبلی رو برگشت بدید با استفاده از اشاره گر this باید بدونید که این موضوع مهمترین اصل این روش هست!
کد:
return this;
ببینید توی این مثال من هر چندتا که بخوام می تونم متدهام رو به همین روال افزایش بدم.
کد:
var obj = function() {};

obj.name = function(name) {
	this.name = name;
	return this;
}

obj.msg = function() {
	alert(this.name);
	return this;
}

obj.msg2 = function() {
	alert(this.name+" msg2");
	return this;
}

obj.name("Davood").msg().msg2();

خب فکر می کنم مثال به اندازه ی کافی گیرا باشه، در هرصورت اگر مشکلی بود در خدمتم.

موفق باشید.
 
آخرین ویرایش:

D.A.V.O.O.D

Member
ممنون امین جان !

منم دقیقا قصد دارم که یه JS Framework برای خودم بنویسم ، منظور از سوال من هم دقیقا همین بود .
 
سلام.

روشی که داوود مدنظرش هست دقیقا همون روشی هست که بنده هم در فریم ورکی که الان دارم روش کار می کنم پیاده سازی کردم.
به این روش اصطلاحا توی جاوااسکریپت بهش می گن Chaining و فریم ورک یا کتابخانه ای که از این روش بهره ببره بهش می گن Chainable نه تنها jQuery بلکه MooTools و Dojo و حتی PrototypeJS هم از این روش استفاده می کنن!

تا حدودی دوست خوبمون dannydolph جان به این موضوع اشاره کردن :)

بزارید یه خرده در اینباره توضیح بدم، لازمه ی اینکار اینه که شما در متدهای شئ تون همیشه متد قبلی رو برگشت بدید با استفاده از اشاره گر this باید بدونید که این موضوع مهمترین اصل این روش هست!
کد:
return this;
ببینید توی این مثال من هر چندتا که بخوام می تونم متدهام رو به همین روال افزایش بدم.
کد:
var obj = function() {};
 
obj.name = function(name) {
    this.name = name;
    return this;
}
 
obj.msg = function() {
    alert(this.name);
    return this;
}
 
obj.msg2 = function() {
    alert(this.name+" msg2");
    return this;
}
 
obj.name("Davood").msg().msg2();

خب فکر می کنم مثال به اندازه ی کافی گیرا باشه، در هرصورت اگر مشکلی بود در خدمتم.

موفق باشید.
ممنون از توضیحاتی که ارائه کردی.من با توجه به سطح اطلاعات دوستان پست دادم.ولی کار بهتر رو شما کردی.اگه در فکر ساختن یه library هستین بهتره که روی oop توی جاوااسکریپت بیشتر مطالعه داشته باشین.منظور من از این حرف کم بودن سطح اطلاعات دوستان نیست بلکه اینه که oop توی js قلق های خاص خودش رو داره و این به این دلیله که js یه زبان کاملاً oo نیست و بصورت کامل از oop پشتیبانی نمیکنه(مثلاً وراثت چند گانه توش قابل پیاده سازی نیست).و بعضی جاهاش رو باید با ترفند oo کنی.بهر حال امیدوارم موفق باشین.
 

eAmin

Well-Known Member
ممنون از توضیحاتی که ارائه کردی.من با توجه به سطح اطلاعات دوستان پست دادم.ولی کار بهتر رو شما کردی.اگه در فکر ساختن یه library هستین بهتره که روی oop توی جاوااسکریپت بیشتر مطالعه داشته باشین.منظور من از این حرف کم بودن سطح اطلاعات دوستان نیست بلکه اینه که oop توی js قلق های خاص خودش رو داره و این به این دلیله که js یه زبان کاملاً oo نیست و بصورت کامل از oop پشتیبانی نمیکنه(مثلاً وراثت چند گانه توش قابل پیاده سازی نیست).و بعضی جاهاش رو باید با ترفند oo کنی.بهر حال امیدوارم موفق باشین.
دقیقا همینطوره...

شئ گرایی در جاوااسکریپت با زبانهای دیگه فرق داره، حدود 3 الی 4 ماه پیش من شروع به آموزشی در این خصوص کردم در یکی از انجمنها کردم که هنوز نیمه کار مونده و هنوز وقت نکردم کاملش کنم و همونجوری داره خاک می خوره، اگر الان برید بهش سر بزنید تا حدودی با بعضی از مفاهیم آشنا می شید.
ین به این دلیله که js یه زبان کاملاً oo نیست و بصورت کامل از oop پشتیبانی نمیکنه(مثلاً وراثت چند گانه توش قابل پیاده سازی نیست)
البته در این ورژن فعلی یعنی 1.5 تا 1.6 ولی از ورژن 1.8 به بعد استاندارد شده و از بیشتر موارد شئ گرایی می شه گفت پشتیبانی می کنه.
 

جدیدترین ارسال ها

بالا