اÙÙ classes اÙÙ
دÙ
جة Ù
ث٠اÙÙ Array Ù Map ÙØºÙرÙÙ
ÙØ§Ø¨ÙÙÙ ÙÙØ§Ù
تداد Ø£ÙØ¶Ø§
عÙ٠سبÙ٠اÙÙ
Ø«Ø§Ù Ø ÙÙØ§ ÙØ±Ø« PowerArray Ù
ÙArray Ø§ÙØ£ØµÙÙ:
// add one more method to it (can do more)
class PowerArray extends Array {
isEmpty() {
return this.length === 0;
}
}
let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false
let filteredArr = arr.filter(item => item >= 10);
alert(filteredArr); // 10, 50
alert(filteredArr.isEmpty()); // false
ÙØ±Ø¬Ù Ù
ÙØ§ØØ¸Ø© Ø´ÙØ¡ Ù
Ø«ÙØ± جدا ÙÙØ§ÙتÙ
اÙ
. Ø§ÙØ£Ø³Ø§ÙÙØ¨ اÙÙ
دÙ
جة Ù
ث٠filter Ùmap ÙØºÙØ±ÙØ§ â ØªÙرجع ÙØ§Ø¦Ùات Ø¬Ø¯ÙØ¯Ø© Ù
٠اÙÙÙØ¹ اÙÙ
ÙØ±ÙØ«PowerArray Ø¨Ø§ÙØ¶Ø¨Ø·. ÙØ³ØªØ®Ø¯Ù
Ø§ÙØªÙÙÙØ° Ø§ÙØ¯Ø§Ø®ÙÙ Ø®Ø§ØµÙØ© `Ù
ÙÙØ´Ø¦ 'اÙÙØ§Ø¦Ù ÙØ°ÙÙ.
Ù٠اÙÙ Ø«Ø§Ù Ø£Ø¹ÙØ§Ù,
arr.constructor === PowerArray
Ø¹ÙØ¯ استدعاء arr.filter () Ø ÙØ¥ÙÙ ÙÙØ´Ø¦ داخÙÙÙØ§ Ù
جÙ
ÙØ¹Ø© Ø¬Ø¯ÙØ¯Ø© Ù
٠اÙÙØªØ§Ø¦Ø¬ باستخداÙ
âarr.constructorâ Ø¨Ø§Ùضبط Ø ÙÙÙØ³ Array Ø§ÙØ£Ø³Ø§Ø³Ù. ÙØ°Ø§ Ù٠اÙÙØ§Ùع رائع Ø¬Ø¯ÙØ§ Ø ÙØ£ÙÙ ÙÙ
ÙÙÙØ§ Ø§ÙØ§Ø³ØªÙ
رار Ù٠استخداÙ
طر٠`` PowerArray` بشÙÙ Ø£ÙØ¨Ø± عÙ٠اÙÙØªÙجة.
Ø¨Ù ÙØ£Ùثر ٠٠ذÙÙ Ø ÙÙ ÙÙÙØ§ ØªØ®ØµÙØµ ÙØ°Ø§ Ø§ÙØ³ÙÙÙ.
ÙÙ
ÙÙÙØ§ Ø¥Ø¶Ø§ÙØ© Ù
ÙØµØ·ÙØ Ø«Ø§Ø¨Øª خاص Symbol.species Ø¥Ù٠اÙÙØµÙ. إذا ÙØ§Ù Ù
ÙØ¬ÙØ¯ÙØ§ Ø ÙÙØ¬Ø¨ Ø£Ù ÙÙØ±Ø¬Ø¹ اÙÙ
ÙÙØ´Ø¦ Ø§ÙØ°Ù ستستخدÙ
Ù JavaScript داخÙÙÙØ§ ÙØ¥Ùشاء ÙÙØ§Ùات Ø¬Ø¯ÙØ¯Ø© ÙÙ Ø®Ø±ÙØ·Ø© ÙÙÙØªØ± ÙÙ
ا Ø¥Ù٠ذÙÙ.
إذا ÙÙØ§ ÙØ±ØºØ¨ Ù٠استخداÙ
طر٠Ù
ضÙ
ÙØ© Ù
Ø«Ù Ø§ÙØ®Ø±Ùطة Ø£ÙØ§ÙÙÙØªØ± ÙØ¥Ø±Ø¬Ø§Ø¹ اÙÙ
صÙÙÙØ§Øª Ø§ÙØ¹Ø§Ø¯ÙØ© Ø ÙÙÙ
ÙÙÙØ§ إرجاع اÙÙ
صÙÙÙØ© ÙÙ` Ø§ÙØ±Ù
ز اÙÙ
ØØ¯Ø¯ 'Ø ÙÙ
ا ÙÙÙ:
class PowerArray extends Array {
isEmpty() {
return this.length === 0;
}
// built-in methods will use this as the constructor
static get [Symbol.species]() {
return Array;
}
}
let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false
// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);
// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
ÙÙ
ا ØªØ±Ù Ø Ø§ÙØ¢Ù ÙÙØ±Ø¬Ø¹ .filter`` Array. ÙØ°ÙÙ ÙÙ
ÙØªÙ
تÙ
Ø±ÙØ± Ø§ÙØ¯Ø§ÙØ© اÙÙ
ÙØ±Ùثة Ø£ÙØ«Ø± Ù
٠ذÙÙ.
تعÙ
Ù Ù
جÙ
ÙØ¹Ø§Øª Ø£Ø®Ø±Ù Ø Ù
ث٠Map ÙSet Ø Ø¹ÙÙ ØØ¯ Ø³ÙØ§Ø¡. ÙÙ
ا Ø£ÙÙÙ
ÙØ³ØªØ®Ø¯Ù
ÙÙ Symbol.species.
ÙØ§ ÙØ¬Ùد ÙÙØªÙØ±ÙØ« Ø§ÙØ«Ø§Ø¨Øª ÙÙ Ù٠اÙ٠د٠جات
ÙÙØ§ Ø¯ÙØ§Ù ثابتة خاصة Ø¨ÙØ§ Ø Ù
ث٠Object.keys ØArray.isArray Ø¥ÙØ®.
ÙÙ
ا ÙØ¹ÙÙ
باÙÙØ¹Ù Ø ØªÙ
تد اÙÙØµÙÙ Ø§ÙØ¯Ø±Ø§Ø³ÙØ© Ø§ÙØ£ØµÙÙØ© ÙØ¨Ø¹Ø¶Ùا Ø§ÙØ¨Ø¹Ø¶. عÙ٠سبÙ٠اÙÙ
Ø«Ø§Ù Ø Array ÙÙ
تدObject.
عادة Ø Ø¹ÙØ¯Ù ا ت٠د ÙØ¦Ø© ÙØ§ØØ¯Ø© Ø£Ø®Ø±Ù Ø ÙØªÙ ØªÙØ±ÙØ« ÙÙ Ù Ù Ø§ÙØ£Ø³Ø§ÙÙØ¨ Ø§ÙØ«Ø§Ø¨ØªØ© ÙØºÙر Ø§ÙØ«Ø§Ø¨ØªØ©. ØªÙ Ø´Ø±Ø Ø°ÙÙ ØªÙ Ø§Ù ÙØ§ Ù٠اÙÙ ÙØ§ÙØ© [] (info: static-properties-methods # statics-and-inheritance).
ÙÙ٠اÙÙØµÙ٠اÙ٠د٠جة Ø§Ø³ØªØ«ÙØ§Ø¡. ÙØ§ ÙØ±Ø«ÙÙ Ø¥ØØµØ§Ø¦Ùات ع٠بعضÙÙ Ø§ÙØ¨Ø¹Ø¶.
عÙ٠سبÙ٠اÙÙ
Ø«Ø§Ù Ø ÙØ±Ø« ÙÙ Ù
Ù Array ÙDate Ù
Ù Object Ø ÙØ°Ø§ ÙØ¥Ù ÙÙØ³Ø®ÙÙ
ا ØªØØªÙ٠عÙ٠طر٠Ù
ÙObject.prototype. ÙÙÙ Array. [[Prototype]] ÙØ§ ÙØ´Ùر Ø¥ÙÙ Object Ø ÙØ°ÙÙ ÙØ§ ÙÙØ¬Ø¯ Ø Ø¹Ù٠سبÙ٠اÙÙ
ثا٠ØArray.keys ()(Ø£ÙDate.keys ()) طرÙÙØ© ثابتة.
Ø¥ÙÙ٠بÙÙØ© Ø§ÙØµÙرة ÙÙ Date ÙObject:
ÙÙ
ا ØªØ±Ù Ø ÙØ§ ÙÙØ¬Ø¯ رابط بÙÙ Ø§ÙØªØ§Ø±ÙØ® ÙØ§ÙÙØ§Ø¦Ù. Ø¥ÙÙÙ
Ù
ستÙÙÙÙ Ø ÙÙØ· ÙØ±Ø« Date.prototype Ù
ÙObject.prototype.
ÙØ°Ø§ Ø§Ø®ØªÙØ§Ù Ù
ÙÙ
Ù٠اÙÙ
ÙØ±Ø§Ø« بÙ٠اÙÙØ§Ø¦Ùات اÙÙ
ضÙ
ÙØ© Ù
ÙØ§Ø±ÙØ© بÙ
ا ÙØØµÙ Ø¹ÙÙÙ Ù
ع extends ââ.

Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)