نمایش نتایج 1 تا 6 از 6

نام تاپیک: پروتو تایپ پویا dynamic prototype

  1. #1
    کاربر دائمی آواتار میلاد قاضی پور
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    اوج بلند
    پست
    768

    پروتو تایپ پویا dynamic prototype

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



    function car (scolor , idoors, impg)

    {
    this.color = scolor;
    this.doors=idoors;
    this.mpg=impg;
    this.drivers=new array ("mike", "sue");

    if (typeof car._initialized=="undefined")

    car.prototype.showcolor=function() {
    alert(this.color);
    };
    car._initialized=true;
    }
    }



    من دقیقا میخوام بدونم اون شرط چه کاری انجام میده . اگر نوشته نشه چه اتفاقی میفته .چرا در آخر اینیشیالایزد ترو شده ؟ چرا undefined به صورت رشته نوشته شده ؟بقیشو بلدم.
    آخرین ویرایش به وسیله میلاد قاضی پور : سه شنبه 31 فروردین 1389 در 13:45 عصر

  2. #2
    کاربر دائمی آواتار alireza_s_84
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    اهواز
    پست
    1,191

    نقل قول: پروتو تایپ پویا dynamic prototype

    سلام دوست عزیز:
    کد HTML:
    function car (scolor , idoors, impg)
    ابتدا یک کلاس (شی جدید ) به نام car تعریف شده که سازنده اون سه تا پارامتر میگیره:
    کد HTML:
    this.color = scolor;
    this.doors=idoors;
    this.mpg=impg;
    this.drivers=new array ("mike", "sue");
    در اینجا اشیای داخلی کلاس با مقادیر این پارامترها مقداردهی(ارزش هی) میشین.
    کد HTML:
    if (typeof car._initialized=="undefined")
    در جاوا اسکریپت اشیایی که null باشند بصورت undefined شناسایی میشن پس ابتدا چک میکنه که اگر نمونه ای از شی car وجود نداشته باشه بعد (فکر میکنم یک خطی رو جا انداخته باشی اینجا باید مقدار دهی بشی شی).
    کد HTML:
    car.prototype.showcolor=function() {
    alert(this.color);
    };
    اینجا هم یک متد برای کلاس تعریف شده که اسمش showcolor هست و وقتی فراخونی بشه مقدار شی داخلی color رو نمایش میده.
    کد HTML:
    car._initialized=true;
    اینجا هم سازنده شی رو برابر با true قرار میده.
    ولی باید بگم یک مقدار از کد بین تعریف متد و مقدار دهی سازنده پریده.
    موفق باشید

  3. #3
    کاربر دائمی آواتار میلاد قاضی پور
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    اوج بلند
    پست
    768

    نقل قول: پروتو تایپ پویا dynamic prototype

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

  4. #4
    کاربر دائمی آواتار alireza_s_84
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    اهواز
    پست
    1,191

    نقل قول: پروتو تایپ پویا dynamic prototype

    نقل قول نوشته شده توسط اوج بلند مشاهده تاپیک
    دوست عزیز ممنون از پاسخ سلیستون . کد کامل هست در اون کتاب چندین مورد از این کد هست و در مبحث وراثتش هم باز کد رو به این صورت نوشته من هم عین کد رو نوشتم همینجا . منظور شمارو از اینکه گفتید نفهمیدم . یعنی اگر از این کلاس یک نمونه ایجاد بشه مثلا چجوریاس ... آخه اینها که رشته هستن اگر یه نمونه ایجاد بشه اون پراپرتی _initialized مگه یه متغیر خصوصی نیست اون از کجاش متوجه میشه که یه نمونه ایجاد شده یا نه من نمی تونم اینو هضم کنم بقیشو اطلاع داشتم .
    سلام دوست عزیز:
    این کلاس شما دو تا ایراد کوچولو داره:
    یکی اینکه شی array اینجوری نوشته میشه Array و بعدش اینکه در شرط چک کردن نمونه ی ساخته شده از شی یک { جا انداخته که درستش اینجوریه:
    کد HTML:
    function car(scolor , idoors, impg)
            {
                this.color = scolor;
                this.doors=idoors;
                this.mpg=impg;
                this.drivers=new Array ("mike", "sue");
    
                if (typeof car._initialized=="undefined")
                {
                    car.prototype.showcolor=function() {
                    alert(this.color);
                    };
                    car._initialized=true;
                }
            }
    نفهمیدم . یعنی اگر از این کلاس یک نمونه ایجاد بشه مثلا چجوریاس ... آخه اینها که رشته هستن اگر یه نمونه ایجاد بشه اون پراپرتی _initialized مگه یه متغیر خصوصی نیست اون از کجاش متوجه میشه که یه نمونه ایجاد شده یا نه من نمی تونم اینو هضم کنم بقیشو اطلاع داشتم .
    دوست من توی شرطچک میکنه که آیا فیلد _initialized مقدار دهی شده یا نه یعنی اگر قبلا از این کلاس یک نمونه ساخته شده باشه در نتیجه این فیلد دارای مقداری غیر از undefined خواهد بود و گرنه در بدنه شرط یک نمونه از شی تعریف شده و این فیلد با مقدار true پر میشه در نتیجه در دفعات بعدی استفاده دیگه این شی مقدار دهی نخواهد شد.
    خوب این فیلد متغیر خصوصی هست ولی خود کلاس مگه به فیلدهای خصوصی و عمومی دسترسی نداره؟!! اینکار توی خود بدنه کلاس داره انجام میشه و لذا مشکلی از لحاظ دسترسی وجود نداره.
    شما کجاش رو هضم نمیکنی ؟؟؟

    نکته نهایی: کلمه کلیدی prototype نام دیگر تابع سازنده شی هست با استفاده از این کلمه کلیدی میتونیم متها و خصوصیات جدیدی رو به اشیای از پیش ساخته شده اضافه کنیم.(دقیقا مثلا کلمه this و متدهای الحاقی در زبان #C)
    آخرین ویرایش به وسیله alireza_s_84 : سه شنبه 31 فروردین 1389 در 15:40 عصر دلیل: افزودن نکته

  5. #5
    کاربر دائمی آواتار میلاد قاضی پور
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    اوج بلند
    پست
    768

    نقل قول: پروتو تایپ پویا dynamic prototype

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

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

  6. #6
    کاربر دائمی آواتار alireza_s_84
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    اهواز
    پست
    1,191

    نقل قول: پروتو تایپ پویا dynamic prototype

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

    برای اینکه در هر بار ایجاد یک نسخه از شی ، برای اینکه تابع شوکالر هم هر بار ایجاد نشه و در نتیجه حافظه اضافی اشغال نشه باید چک بشه که این شی قبلا ایجاد شده یا نه . اگر ایجاد شده بود پس اون تابع هم ایجاد شده و شرط نباید برقرار باشه . اما اگر از شی یک نمونه ایجاد نشده بود ، شرط برقرار میشه و در نتیجه اولین نمونه از تابع هم ایجاد میشه .
    بله ولی بهتره اینجوری بگیم چک میکنه که ایا این تابع به شی اضافه شده یا نه و اگر اضافه نشده بود
    اضافه میکنه و اون متغیر initialized در واقع برای همین برابر true قرار میگیره که مشخص بشه بار اولی هست که شی ایجاد میشه یا نه.
    موفق باشی

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •