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 uk.javascript.info — Заміна властивості "prototype"

  • Підручник
  • Мова програмування JavaScript
  • Прототипи, наслідування
  • F.prototype
назад до уроку

Заміна властивості "prototype"

важливість: 5

В коді, що показаний нижче, ми створюємо функцію-конструктор new Rabbit і потім змінюємо її prototype.

На початку, маємо цей код:

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.