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 ja.javascript.info — "prototype" の変更

  • チュートリアル
  • JavaScript 言語
  • プロトタイプ, 継承
  • F.prototype
レッスンに戻る

"prototype" の変更

重要性: 5

下のコードでは、new Rabbit を作り、そのプロトタイプを変更しようとしています。

最初は次のコードがあります:

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

let rabbit = new Rabbit();

alert( rabbit.eats ); // true
  1. 1つ文字列を追加しました(強調部分)。今 alert は何が表示されるでしょう?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype = {};
    
    alert( rabbit.eats ); // ?
  2. …また、コードが次のような場合は(1行置き換えました)?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype.eats = false;
    
    alert( rabbit.eats ); // ?
  3. この場合は (1行置き換えました)?

    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 ); // ?

Answers:

  1. true.

    Rabbit.prototype への代入は、新しいオブジェクトに対して [[Prototype]] を設定しますが、既存のものへの影響はありません。

  2. false.

    オブジェクトは参照によって代入されます。Rabbit.prototype からのオブジェクトは複製されておらず、依然として、Rabbit.prototype と rabbit の [[Prototype]] 両方によって参照される1つのオブジェクトです。

    従って、1つの参照を通してその中身を変えたとき、別の参照と通じてそれが見えます。

  3. true.

    すべての delete 操作はオブジェクトに対して直接適用されます。今回の delete rabbit.eats は rabbit から 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.