ورود

View Full Version : چگونه یک property در زبان javascript ایجاد کنیم؟



dreams4gotten
پنج شنبه 31 مرداد 1387, 11:03 صبح
با سلام به دوستان.

من یه سئوال درباره نحوه تعریف یک property در javascript داشتم.
همونطوری که میدونین در این زبان برای تعریف یک property خیلی راحت با استفاده از متغیر this که به شیء

جاری اشاره می کنه ، میشه این کار رو انجام داد.
this.testProp="hello world" //initialize

کاربران این شیء با تعریف یک نمونه از این شیء میتوانند به راحتی به متغیر testProp دسترسی داشته باشند.
.
.
.
حالا من میخوام که نحوه دسترسی کاربران به این property رو کنترل کنم.(متل خیلی از زبانهای دیگه!!)
یعنی در هنگامی که کاربران مقدار این property رو عوض کردن یک تابع در داخل شیء فراخوانی بشه تا متغیرهای private شیء رو بروز رسانی کنه.
البته این رو بگم که این کار در firefox با استفاده از متد watch() و unwatch() که نام property و نام یک تابع رو میگیره انجام میشه. ولی این متدها در IE کارنمیکنه.http://forum.p30world.com/images/New-smile/N_aggressive%20%2840%29.gif

ممنون میشم اگه دوستان راهی پیشنهاد کنن که توی همه مرورگرها جواب بده.:قلب:

raravaice
پنج شنبه 31 مرداد 1387, 11:42 صبح
به نظر اهل فن میاید!
اینو ببینید ماورا این بحث ها به دردتون میخوره.

http://www.jocys.com/scripts/classes/documents/default.aspx

موفق باشید

dreams4gotten
پنج شنبه 31 مرداد 1387, 18:44 عصر
از راهنماییت ممنونم.:قلب:

ولی اونجا هم چیزی پیدا نکردم.

شاید باید بیشتر بگردم.
.
.
.
در ضمن کتابخانه خیلی جالبیه.:تشویق:

امید امرایی
پنج شنبه 31 مرداد 1387, 19:21 عصر
IE هیچ روشی رو ارائه نداده دوست من
تنها راه اینه که شما به جای مقدار دهی مستقیم مثل تمام برنامه های استاندارد شی گرا از مقدار دهی غیر مستقیم استفاده کنید


object.setProperty = function (){}

dreams4gotten
یک شنبه 03 شهریور 1387, 07:59 صبح
ممنون دوست عزیز.
من این قطعه کد رو نوشتم ولی انگار هیج عملی انجام نمیده:


function obj()
{
this.prop=function (){this.prop++}
}

var o = new obj();
o.prop=100;
alert(o.prop);


با توجه به فرمایش شما این قطعه کد باید با هر بار مقداردهی یکی به prop اضافه کند . ولی خروجی آن همان مقدار اولیه set شده است یعنی 100 !!!

امید امرایی
یک شنبه 03 شهریور 1387, 09:21 صبح
خير دوست عزيز بنده همچين چيزي رو عرض نكردم
شما اگه دقت كنيد در obj يك بار prop به عنوان تابع تعريف شده و در درون همون تابع مثل يك متغير افزايش داده شده و اين يعني اشكال
روش صحيح اينه:


function obj()
{
this.prop;

this.setProp = function (val){
this.prop = val
}
}

var o = new obj();
o.setProp(100);
alert(o.prop);
مزيت مقدار دهي غير مستقيم اينه كه مي تونيد داده ها رو كنترل كنيد تا مقداري غير از چيزي كه مي خوايد نداشته باشن
همون مثال ضمن كنترل داده ها :




function obj()
{
this.prop;

this.setProp = function (val){
if(val < 100){
alert('Could not assign value less than 100 to prop');
return false;
}
this.prop = val
}
}

var o = new obj();

o.setProp(50); //Invalid Value , prop will not change
o.setProp(100);

alert(o.prop);

dreams4gotten
سه شنبه 05 شهریور 1387, 18:17 عصر
دوست عزیز خیلی ممنون.
مشکلم حل شد. اینهمه دردسر به خاطر یک "val" ... حقیقتش من همه حالتها رو امتحان کرده بودم غیر از این رو!!!
همیشه موفق باشی...:تشویق:

امید امرایی
سه شنبه 05 شهریور 1387, 22:07 عصر
شمام موفق باشید

dreams4gotten
چهارشنبه 13 شهریور 1387, 11:51 صبح
سلام دوست عزیز.
راه حلی که گفتی خیلی جالب بود ولی یک مشکل کوچولو پیدا شده . . . . .

توی مثالی که زدی اگه یک کاربر مستقیمأ this.prop رو مقدار دهی کنه که همه چی خراب میشه !!! منظورم اینه که ممکنه یه مقدار نامعتبر وارد کنه.
مثلأ
this.prop='1234' //invalid value. value must be a number

twelve
چهارشنبه 13 شهریور 1387, 14:24 عصر
خب چک کن اگر نا معتبر بود ، پیغام خطا بده !

dreams4gotten
چهارشنبه 13 شهریور 1387, 16:14 عصر
نه اینجوری همیشه شئ توی یک وضعیت safe قرار میگیره