الرجوع الي الدرس

أين سيحدث التعديل؟

لدينا الكائن rabbit يرث من الكائن animal.

لو استدعينا rabbit.eat()‎ فأيّ الكائنين ستُعدل به الخاصية full، الكائن animal أم الكائن rabbit؟

let animal = {
  eat() {
    this.full = true;
  }
};

let rabbit = {
  __proto__: animal
};

rabbit.eat();

الإجابة هي: الكائن rabbit.

لأنّ قيمة this هي الكائن قبل النقطة، بذلك يُعدّل rabbit.eat()‎.

عملية البحث عن الخاصيات تختلف تمامًا عن عملية تنفيذ تلك الخاصيات.

نجد التابِع rabbit.eat سيُستدعى أولًا من كائن النموذج الأولي، وبعدها نُنفّذه على أنّ this=rabbit.