GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

No menu could be recovered. Follow the blue links in the page.

This view

  • Original page
  • New address

GeezerVison is showing fa.javascript.info — تغییر "prototype"

  • آموزش
  • زبان جاوااسکریپت
  • پروتوتایپ‌ها، ارث‌بری
  • F.prototype
بازگشت به درس

تغییر "prototype"

اهمیت: 5

در کد زیر new Rabbit را ایجاد می‌کنیم و سپس سعی می‌کنیم پروتوتایپ آن را تغییر دهیم.

در شروع، ما این کد را داریم:

function Rabbit() {}
Rabbit.prototype = {
  eats: true
};

let rabbit = new Rabbit();

alert( rabbit.eats ); // true
  1. یک رشته دیگر اضافه کردیم (تاکید شده). اکنون alert چه چیزی را نشان می‌دهد؟

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype = {};
    
    alert( rabbit.eats ); // ?
  2. …و اگر کد به این صورت باشد (یک خط جایگزین شده است)؟

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype.eats = false;
    
    alert( rabbit.eats ); // ?
  3. و مثل این (یک خط جایگزین شده است)؟

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete rabbit.eats;
    
    alert( rabbit.eats ); // ?
  4. آخرین نوع:

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete Rabbit.prototype.eats;
    
    alert( rabbit.eats ); // ?

پاسخ‌ها:

  1. true.

    انتساب به Rabbit.prototype ،[[Prototype]] را برای اشیاء جدید تنظیم می‌کند، اما بر موارد موجود تأثیری نمی‌گذارد.

  2. false.

    اشیاء با مرجع تخصیص داده می‌شوند. شیء Rabbit.prototype تکراری نیست، همچنان یک شیء واحد است که هم توسط Rabbit.prototype و هم توسط [[Prototype]] از rabbit ارجاع داده شده است.

    بنابراین وقتی محتوای آن را از طریق یک مرجع تغییر می‌دهیم، از طریق مرجع دیگر قابل مشاهده است.

  3. true.

    تمام عملیات delete مستقیماً روی شیء اعمال می‌شود. در اینجا delete rabbit.eats سعی می‌کند ویژگی eats را از rabbit حذف کند، اما آن را ندارد. بنابراین عملیات هیچ تاثیری نخواهد داشت.

  4. undefined.

    ویژگی eats از پروتوتایپ حذف شده است، دیگر وجود ندارد.

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.