انتقل إلى المحتوى

٤.١٢ النماذج الأولية — الجزء الأول

تمهيد

التمرين 1: أنشئ بانيًا للهواتف اعتمادًا على الكائن التالي.

/*
var phone = {
  os: null,
  ram: null,
  storage: null
};
*/

function Phone(os, ram, stg){
  this.os = os;
  this.ram = ram;
  this.storage = stg;
}

var phone1 = new Phone("Android", "2GB", "36GB");

console.log(phone1);

النتيجة هي: Phone {os: "Android", ram: "2GB", storage: "36GB"}

التمرين 2: ارجع إلى التمرين 1؛ ما نوع Phone?

function Phone(os, ram, stg){
  this.os = os;
  this.ram = ram;
  this.storage = stg;
}

var phone1 = new Phone("Android", "2GB", "36GB");

console.log(typeof Phone);

النتيجة هي: الدوال

التمرين 3: ارجع إلى التمرين 1؛ هل Phone نسخة من Object?

function Phone(os, ram, stg){
  this.os = os;
  this.ram = ram;
  this.storage = stg;
}

var phone1 = new Phone("Android", "2GB", "36GB");

console.log(Phone instanceof Object);

النتيجة هي: true

التمرين 4: ارجع إلى التمرين 1؛ ما النموذج الأولي لـ Phone?

function Phone(os, ram, stg){
  this.os = os;
  this.ram = ram;
  this.storage = stg;
}

var phone1 = new Phone("Android", "2GB", "36GB");

console.log(Phone.prototype);

النتيجة هي: {constructor: ƒ}

التمرين 5: ارجع إلى التمرين 4؛ ما نوع Phone ؟

function Phone(os, ram, stg){
  this.os = os;
  this.ram = ram;
  this.storage = stg;
}

var phone1 = new Phone("Android", "2GB", "36GB");

console.log(typeof Phone.prototype);

النتيجة هي: object

التمرين 6: ارجع إلى التمرين 4; Phone.prototype كائن؛ هل يمكنك الوصول إلى خاصيته constructor ؟

function Phone(os, ram, stg){
  this.os = os;
  this.ram = ram;
  this.storage = stg;
}

var phone1 = new Phone("Android", "2GB", "36GB");

console.log(Phone.prototype.constructor);

النتيجة كما يلي:

ƒ Phone(os, ram, stg){
  this.os = os;
  this.ram = ram;
  this.storage = stg;
}

ملخص

Phone دالة بانية وكائن أيضًا، وهي نسخة من Object .

Phone يرث الخصائص والطرائق من نموذجه الأولي. يمكنك الوصول إلى Phone باستخدام Phone.prototype.


تعيين النموذج الأولي

التمرين 7: ما النموذج الأولي لـ Set ؟

console.log(Set.prototype);

النتيجة هي: Set {constructor: ƒ, has: ƒ, add: ƒ, delete: ƒ, clear: ƒ, …}

التمرين 8: ارجع إلى التمرين 7؛ ما نوع Set ؟

console.log(typeof Set.prototype);

النتيجة هي: object ‍‍‍

التمرين 9: ارجع إلى التمرين 7; Set.prototype لديه add طريقةً. اطبع قيمتها في وحدة التحكم.

console.log(Set.prototype.add);

النتيجة هي: ƒ add() { [native code] }

التمرين 10: أنشئ نسخة جديدة من Set باستخدام Set .

var set1 = new Set();

console.log(set1);

النتيجة هي: Set(0) {}

التمرين 11: استخدم الدالة add لإضافة 5 على التمرين 10 set1. تلميح: استخدم set1.add(5).

var set1 = new Set();

set1.add(5);

console.log(set1);

النتيجة هي: Set(1) {5}

التمرين 12: ارجع إلى التمرين 11؛ أضف 8 على set1.

var set1 = new Set();

set1.add(5);
set1.add(8);

console.log(set1);

النتيجة هي: Set(2) {5, 8}

التمرين 13: ارجع إلى التمرين 12؛ أضف 5 إلى set1.

var set1 = new Set();

set1.add(5);
set1.add(8);
set1.add(5);

console.log(set1);

النتيجة هي: Set(2) {5, 8}

المجموعات (Set)

Set مجموعة عناصر فريدة لا تتكرّر قيمها.

التمرين 14: ارجع إلى التمرين 7; Set.prototype لديه delete طريقةً. اطبع قيمتها في وحدة التحكم.

console.log(Set.prototype.delete);

النتيجة هي: ƒ delete() { [native code] }

التمرين 15: استخدم delete لحذف 8 من التمرين 13 set1. تلميح: استخدم set1.delete(8).

var set1 = new Set();

set1.add(5);
set1.add(8);
set1.add(5);
set1.delete(8)

console.log(set1);

النتيجة هي: Set(1) {5}

التمرين 16: ارجع إلى التمرين 7; Set.prototype لديه clear طريقةً. اطبع قيمتها في وحدة التحكم.

console.log(Set.prototype.clear);

النتيجة هي: ƒ clear() { [native code] }

التمرين 17: استخدم الدالة clear لحذف جميع عناصر التمرين 15 set1. تلميح: استخدم set1.clear().

var set1 = new Set();

set1.add(5);
set1.add(8);
set1.add(5);
set1.delete(8)
set1.clear()

console.log(set1);

النتيجة هي: Set(0) {}

النماذج الأولية والدوال البانية

يمكن استكشاف الخصائص والطرائق المتاحة للنسخ بدراسة نموذج الأولي.

الكائن المنشأ بالباني يرث عادةً من الكائن الموجود في خاصية prototype لذلك الباني.


سلسلة النماذج الأولية

التمرين 18: Set باني مضمّن، وprototype الخاص به كائن. ما نوع Set؟ وهل Set نسخة من Object ؟

console.log(`The type of Set constructor: ${typeof Set}`);
console.log(`Is Set constructor an instance of Object constructor: ${Set instanceof Object}`);

النتيجة كما يلي:

The type of Set constructor: function
Is Set constructor an instance of Object constructor: true

التمرين 19: ما نوع Set.prototype؟ وهل Set.prototype نسخة من Object ؟

console.log(`The type of Set.prototype: ${typeof Set.prototype}`);
console.log(`Is Set.prototype an instance of Object constructor: ${Set.prototype instanceof Object}`);

النتيجة كما يلي:

The type of Set.prototype: object
Is Set.prototype an instance of Object constructor: true

التمرين 20: Set.prototype كائن، لذا يرث خصائص وطرائق Object . أما Object فله بدوره سلسلة نماذج أولية. ما Object.prototype?

console.log(Object.prototype);

النتيجة هي: {constructor: ƒ, defineGetter: ƒ, defineSetter: ƒ, hasOwnProperty: ƒ, lookupGetter: ƒ, …}

التمرين 21: Set.prototype كائن. لا نستخدم للوصول إلى نموذجه الأولي الخاصية prototype لأن prototype خاصية توجد على الدوال القابلة للبناء لتحديد نموذج نسخها. بدلًا منها استخدم obj.__proto__ للوصول إلى النموذج الأولي للنسخة. ما النموذج الأولي لـ Set.prototype?

console.log(Set.prototype.__proto__);

النتيجة هي: {constructor: ƒ, defineGetter: ƒ, defineSetter: ƒ, hasOwnProperty: ƒ, lookupGetter: ƒ, …}

التمرين 22: ارجع إلى التمرين 20 و التمرين 21؛ هل Set.prototype.__proto__ يساوي Object.prototype?

console.log(Set.prototype.__proto__ === Object.prototype);

النتيجة هي: true

التمرين 23: ما نوع Object.prototype?

console.log(typeof Object.prototype);

النتيجة هي: object

التمرين 24: Object.prototype كائن؛ فما نموذجه الأولي؟

console.log(Object.prototype.__proto__);

النتيجة هي: null

سلسلة النماذج الأولية

للكائن رابط داخلي إلى نموذج أولي، قد يكون كائنًا آخر أو null عند نهاية السلسلة.

يمكن الوصول إلى خاصية prototype للدالة البانية باستخدام constructorName.prototype. ويمكن الوصول إلى النموذج الأولي لكائن باستخدام obj.__proto__.

في هذه الأمثلة، كل كائن أو باني نسخة من Object .

تنتهي سلسلة النماذج الأولية بالقيمة null، وهي ليست كائنًا؛ بل null قيمة أولية لا تمتلك خصائص أو طرائق.