در Ø¨Ø±ÙØ§Ù ÙâÙÙÛØ³Û Ø´ÛØ¡âÚ¯Ø±Ø§Ø Ú©ÙØ§Ø³ ÛÚ© اÙÚ¯ÙÛ-کد-Ø¨Ø±ÙØ§Ù Ù ÙØ§Ø¨Ù ØªÙØ³Ø¹Ù Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ Ø§Ø´ÛØ§Ø¡Ø Ø§Ø±Ø§Ø¦Ù Ù ÙØ§Ø¯Ûر اÙÙÛÙ Ø¨Ø±Ø§Û ØØ§Ùت (Ù ØªØºÛØ±ÙØ§Û Ø¹Ø¶Ù) Ù Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ø±ÙØªØ§Ø± (ØªÙØ§Ø¨Ø¹ ÛØ§ Ø±ÙØ´âÙØ§Û عضÙ) است.
در Ø¹Ù ÙØ ٠ا Ø§ØºÙØ¨ ÙÛØ§Ø² Ø¨Ù Ø§ÛØ¬Ø§Ø¯ Ø¨Ø³ÛØ§Ø±Û از Ø§Ø´ÛØ§Ø¡ از ÛÚ© ÙÙØ¹Ø ٠اÙÙØ¯ Ú©Ø§Ø±Ø¨Ø±Ø§ÙØ ÛØ§ Ú©Ø§ÙØ§Ùا ÛØ§ ÙØ± ÚÛØ² دÛÚ¯Ø±Û Ø¯Ø§Ø±ÛÙ .
ÙÙ
Ø§ÙØ·Ùر Ú©Ù ÙØ¨Ùا٠از ÙØµÙ Ø³Ø§Ø²ÙØ¯ÙØ Ø¹Ù
Ùگر "new" Ù
ÛâØ¯Ø§ÙÛÙ
Ø new function Ù
ÛâØªÙØ§Ùد در اÛÙ Ù
ÙØ±Ø¯ Ú©Ù
Ú© Ú©ÙØ¯.
ا٠ا در Ø¬Ø§ÙØ§âاسکرÛپت Ù Ø¯Ø±ÙØ ساختار Â«Ú©ÙØ§Ø³Â» Ù¾ÛØ´Ø±ÙتÙâØªØ±Û ÙØ¬Ùد دارد Ú©Ù ÙÛÚÚ¯ÛâÙØ§Û Ø¬Ø¯ÛØ¯ Ø¨Ø³ÛØ§Ø± Ø®ÙØ¨Û را ٠عرÙÛ Ù ÛâÚ©ÙØ¯ Ú©Ù Ø¨Ø±Ø§Û Ø¨Ø±ÙØ§Ù ÙâÙÙÛØ³Û Ø´ÛØ¡âگرا Ù ÙÛØ¯ ÙØ³ØªÙد.
سÛÙØªÚ©Ø³ Â«Ú©ÙØ§Ø³Â»
سÛÙØªÚ©Ø³ پاÛ٠اÛÙÚ¯ÙÙ٠است:
class MyClass {
// Ù
تدâÙØ§Û Ú©ÙØ§Ø³
constructor() { ... }
method1() { ... }
method2() { ... }
method3() { ... }
...
}
سپس از new MyClass() Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ ÛÚ© Ø´ÛØ¡ Ø¬Ø¯ÛØ¯ با تÙ
اÙ
Ù
ØªØ¯ÙØ§Û ÙÙØ±Ø³Øª Ø´Ø¯Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯.
Ù
تد constructor() Ø¨Ù Ø·ÙØ± Ø®ÙØ¯Ú©Ø§Ø± ØªÙØ³Ø· new ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâØ´ÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù
ÛâØªÙØ§ÙÛÙ
Ø´ÛØ¡ را در Ø¢ÙØ¬Ø§ Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ Ø§ÙÙÛÙ Ú©ÙÛÙ
.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
class User {
constructor(name) {
this.name = name;
}
sayHi() {
alert(this.name);
}
}
// Usage:
let user = new User("John");
user.sayHi();
ÙÙØªÛ new User("John") ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâØ´ÙØ¯:
- ÛÚ© Ø´ÛØ¡ Ø¬Ø¯ÛØ¯ Ø§ÛØ¬Ø§Ø¯ Ù ÛâØ´ÙØ¯.
constructorبا آرگÙ٠ا٠داد٠شد٠اجرا Ù ÛâØ´ÙØ¯ ٠آ٠را بÙthis.nameاختصاص Ù ÛâØ¯ÙØ¯.
â¦Ø³Ù¾Ø³ Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
Ù
تدâÙØ§Û Ø´ÛØ¡ را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ
Ø Ù
اÙÙØ¯ user.sayHi().
ÛÚ© Ù Ø´Ú©Ù Ø±Ø§ÛØ¬ Ø¨Ø±Ø§Û ØªÙØ³Ø¹Ù دÙÙØ¯Ú¯Ø§Ù تاز٠کار اÛ٠است Ú©Ù ÛÚ© کا٠ا بÛÙ Ù ØªØ¯ÙØ§Û Ú©ÙØ§Ø³ ÙØ±Ø§Ø± Ù ÛâØ¯ÙÙØ¯ Ú©Ù Ù ÙØ¬Ø± ب٠ÛÚ© Ø®Ø·Ø§Û Ø³ÛÙØªÚ©Ø³ Ù ÛâØ´ÙØ¯.
Ù٠اد در اÛÙØ¬Ø§ ÙØ¨Ø§Ûد با Ø´ÛØ¡ ÙÙØ¸Û Ø§Ø´ØªØ¨Ø§Ù Ø´ÙØ¯. در Ú©ÙØ§Ø³Ø ÙÛØ§Ø²Û ب٠کا٠ا ÙÛØ³Øª.
ÛÚ© Ú©ÙØ§Ø³ ÚÛØ³ØªØ
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ class دÙÛÙØ§Ù ÚÛØ³ØªØ اÛÙ ÛÚ© Ù
ÙØ¬ÙØ¯ÛØª کاÙ
ÙØ§Ù Ø¬Ø¯ÛØ¯ در Ø³Ø·Ø Ø²Ø¨Ø§Ù ÙÛØ³ØªØ ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
Ù
ک٠است ØªØµÙØ± Ø´ÙØ¯.
Ø¨ÛØ§ÛÛØ¯ از ÙØ± جادÙÛÛ Ø±ÙÙ٠اÛÛ Ú©ÙÛ٠٠ببÛÙÛÙ Ú©ÙØ§Ø³ ÙØ§Ùعا٠ÚÛØ³Øª. اÛ٠ب٠درک Ø¨Ø³ÛØ§Ø±Û از Ø¬ÙØ¨ÙâÙØ§Û Ù¾ÛÚÛØ¯Ù Ú©Ù Ú© Ù ÛâÚ©ÙØ¯.
در Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ú©ÙØ§Ø³ ÙÙØ¹Û تابع است.
در اÛÙØ¬Ø§Ø ÙگاÙÛ Ø¨ÛÙØ¯Ø§Ø²ÛÙ :
class User {
constructor(name) { this.name = name; }
sayHi() { alert(this.name); }
}
// اثبات: کاربر ÛÚ© تابع است
alert(typeof User); // تابع
Ú©Ø§Ø±Û Ú©Ù Ø³Ø§Ø®ØªØ§Ø± class User {...} ÙØ§Ùعا Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙØ¯ اÛ٠است:
- ØªØ§Ø¨Ø¹Û Ø¨Ù ÙØ§Ù
UserØ§ÛØ¬Ø§Ø¯ Ù ÛâÚ©ÙØ¯ Ú©Ù ÙØªÛج٠تعرÛÙ Ú©ÙØ§Ø³ Ù ÛâØ´ÙØ¯. کد تابع از ٠تد Ø³Ø§Ø²ÙØ¯Ù Ú¯Ø±ÙØªÙ شد٠است (اگر ÚÙÛÙ Ø±ÙØ´Û را ÙÙÙÛØ³Û٠خاÙÛ ÙØ±Ø¶ Ù ÛâØ´ÙØ¯). - Ù
ØªØ¯ÙØ§Û Ú©ÙØ§Ø³Ø Ù
اÙÙØ¯
sayHiرا درUser.prototypeØ°Ø®ÛØ±Ù Ù ÛâÚ©ÙØ¯.
پس از Ø§ÛØ¬Ø§Ø¯ Ø´ÛØ¡ new UserØ ÙÙØªÛ Ù
تد آ٠را ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâÚ©ÙÛÙ
Ø Ø§Ø² ÙÙ
ÙÙ٠اÙÙÛÙ Ú¯Ø±ÙØªÙ Ù
ÛâØ´ÙØ¯Ø درست ÙÙ
Ø§ÙØ·Ùر ک٠در ÙØµÙ F.prototype ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ø´ÛØ¡ ب٠Ù
ØªØ¯ÙØ§Û Ú©ÙØ§Ø³ Ø¯Ø³ØªØ±Ø³Û Ø¯Ø§Ø±Ø¯.
Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
ÙØªÛج٠تعرÛÙ class User را Ø¨Ù ØµÙØ±Øª Ø²ÛØ± ÙØ´Ø§Ù دÙÛÙ
:
اÛ٠کد Ø¨Ø±Ø§Û Ø¯Ø±ÙÙâÛØ§Ø¨Û آ٠است:
class User {
constructor(name) { this.name = name; }
sayHi() { alert(this.name); }
}
// Ú©ÙØ§Ø³ ÛÚ© تابع است
alert(typeof User); // تابع
// ... ÛØ§ Ø¨Ù Ø·ÙØ± دÙÛÙ ØªØ±Ø Ù
تد Ø³Ø§Ø²ÙØ¯Ù
alert(User === User.prototype.constructor); // true
// :ÙØ³ØªÙØ¯Ø Ø¨Ù Ø¹ÙÙØ§Ù Ù
ثا٠User.prototype Ù
ØªØ¯ÙØ§ در
alert(User.prototype.sayHi); // sayHi کد Ù
تد
// دÙÛÙØ§ د٠Ù
تد در Ù¾Ø±ÙØªÙتاÛÙ¾ ÙØ¬Ùد دارد
alert(Object.getOwnPropertyNames(User.prototype)); // sayHi ØØ³Ø§Ø²ÙدÙ
ÙÙØ· ÛÚ© سÛÙØªÚ©Ø³ Ø¨Ø±Ø§Û Ø²ÛØ¨Ø§Ú©Ø±Ø¯Ù(syntactic sugar) ÙÛØ³Øª
گاÙÛ Ø§ÙÙØ§Øª Ù
ردÙ
Ù
ÛâÚ¯ÙÛÙØ¯ Ú©Ù class ÛÚ© «سÛÙØªÚ©Ø³ Ø¨Ø±Ø§Û Ø²ÛØ¨Ø§Ú©Ø±Ø¯Ù(syntactic sugar)» است (سÛÙØªÚ©Ø³Û Ú©Ù Ø¨Ø±Ø§Û Ø®ÙØ§Ùد٠سادÙâØªØ± طراØÛ Ø´Ø¯Ù Ø§Ø³ØªØ Ø§Ù
ا ÚÛØ² Ø¬Ø¯ÛØ¯Û Ù
عرÙÛ ÙÙ
ÛâÚ©ÙØ¯)Ø Ø²ÛØ±Ø§ در ÙØ§Ùع Ù
ÛâØªÙØ§ÙÛÙ
ÙÙ
ا٠را بدÙÙ Ú©ÙÙ
Ù Ú©ÙÛØ¯Û class تعرÛÙ Ú©ÙÛÙ
:
// بازÙÙÛØ³Û Ú©ÙØ§Ø³ کاربر در ØªÙØ§Ø¨Ø¹ Ø®Ø§ÙØµ
// 1. Ø§ÛØ¬Ø§Ø¯ تابع Ø³Ø§Ø²ÙØ¯Ù
function User(name) {
this.name = name;
}
// ÛÚ© Ù¾Ø±ÙØªÙتاÛÙ¾ تابع Ø¨Ù Ø·ÙØ± Ù¾ÛØ´âÙØ±Ø¶ Ø¯Ø§Ø±Ø§Û ÙÛÚÚ¯Û "Ø³Ø§Ø²ÙØ¯Ù" استØ
// پس Ù
ا ÙÛØ§Ø² ÙØ¯Ø§Ø±ÛÙ
ک٠آ٠را Ø§ÛØ¬Ø§Ø¯ Ú©ÙÛÙ
// 2. اضاÙ٠کرد٠Ù
تد Ø¨Ù Ù¾Ø±ÙØªÙتاÛÙ¾
User.prototype.sayHi = function() {
alert(this.name);
};
// Usage:
let user = new User("John");
user.sayHi();
ÙØªÛج٠اÛ٠تعرÛÙ ØªÙØ±Ûبا٠Ûکسا٠است. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ در ÙØ§Ùع Ø¯ÙØ§ÛÙÛ ÙØ¬Ùد دارد Ú©Ù Ù
ÛâØªÙØ§Ù class را ÛÚ© سÛÙØªÚ©Ø³ Ø¨Ø±Ø§Û Ø²ÛØ¨Ø§Ú©Ø±Ø¯Ù(syntactic sugar) Ø¨Ø±Ø§Û ØªØ¹Ø±ÛÙ Ø³Ø§Ø²ÙØ¯Ù ÙÙ
را٠با Ø±ÙØ´âÙØ§Û ÙÙ
ÙÙ٠اÙÙÛ٠آ٠در ÙØ¸Ø± Ú¯Ø±ÙØª.
با اÛÙ ØØ§ÙØ ØªÙØ§ÙتâÙØ§Û Ù ÙÙ Û ÙØ¬Ùد دارد.
-
Ø§Ø¨ØªØ¯Ø§Ø ÛÚ© تابع Ø§ÛØ¬Ø§Ø¯ Ø´Ø¯Ù ØªÙØ³Ø·
classØªÙØ³Ø· ÛÚ© ÙÛÚÚ¯Û Ø¯Ø§Ø®ÙÛ ÙÛÚÙ[[IsClassConstructor]]: trueØ¨Ø±ÚØ³Ø¨ Ú¯Ø°Ø§Ø±Û Ù ÛâØ´ÙØ¯:. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ú©Ø§Ù ÙØ§Ù Ù Ø´Ø§Ø¨Ù Ø§ÛØ¬Ø§Ø¯ Ø¢Ù Ø¨Ù ØµÙØ±Øª Ø¯Ø³ØªÛ ÙÛØ³Øª.زبا٠آ٠ÙÛÚÚ¯Û Ø±Ø§ در ٠کاÙâÙØ§Û ٠ختÙÙ Ø¨Ø±Ø±Ø³Û Ù ÛâÚ©ÙØ¯. ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ بر Ø®ÙØ§Ù ÛÚ© تابع ٠ع٠ÙÙÛØ Ø¨Ø§ÛØ¯ با
newÙØ±Ø§Ø®ÙاÙÛ Ø´ÙØ¯:class User { constructor() {} } alert(typeof User); // function User(); // خطا: Ø³Ø§Ø²ÙØ¯Ù Ú©ÙØ§Ø³ کاربر را ÙÙ ÛâØªÙØ§Ù بدÙÙ 'new' ÙØ±Ø§Ø®ÙاÙÛ Ú©Ø±Ø¯ÙÙ ÚÙÛÙØ ÙÙ Ø§ÛØ´ رشتÙâØ§Û Ø§Ø² Ø³Ø§Ø²ÙØ¯Ù Ú©ÙØ§Ø³ در اکثر Ù ÙØªÙØ±ÙØ§Û Ø¬Ø§ÙØ§âاسکرÛپت با âÚ©ÙØ§Ø³â¦â Ø´Ø±ÙØ¹ Ù ÛâØ´ÙØ¯.
class User { constructor() {} } alert(User); // class User { ... }ØªÙØ§ÙتâÙØ§Û دÛÚ¯Ø±Û ÙÛØ² ÙØ¬Ùد Ø¯Ø§Ø±Ø¯Ø Ø¨Ù Ø²ÙØ¯Û Ø¢ÙÙØ§ را Ø®ÙØ§ÙÛÙ Ø¯ÛØ¯.
-
Ø±ÙØ´âÙØ§Û Ú©ÙØ§Ø³ ØºÛØ±Ùاب٠ش٠ارش ÙØ³ØªÙد. ÛÚ© تعرÛÙ Ú©ÙØ§Ø³Ø پرÚÙ
enumerableرا Ø¨Ø±Ø§Û ÙÙ Ù Ù ØªØ¯ÙØ§Û"prototype"رÙÛfalseØªÙØ¸ÛÙ Ù ÛâÚ©ÙØ¯.اÛÙ Ø®ÙØ¨ Ø§Ø³ØªØ Ø²ÛØ±Ø§ اگر
for..inرا رÙÛ ÛÚ© Ø´ÛØ¡ ÙØ±Ø§Ø± دÙÛÙ Ø Ù Ø¹Ù ÙÙØ§Ù ٠تدâÙØ§Û Ú©ÙØ§Ø³ آ٠را ÙÙ ÛâØ®ÙØ§ÙÛÙ . -
Ú©ÙØ§Ø³âÙØ§ ÙÙ ÛØ´Ù از
use strictØ§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÙØ¯. ØªÙ Ø§Ù Ú©Ø¯ÙØ§Û داخ٠ساختار Ú©ÙØ§Ø³ Ø¨Ù Ø·ÙØ± Ø®ÙØ¯Ú©Ø§Ø± در ØØ§Ùت سخت ÙØ±Ø§Ø± Ù ÛâÚ¯ÛØ±Ùد.
Ø¹ÙØ§Ù٠بر اÛÙØ سÛÙØªÚ©Ø³ class Ø¨Ø³ÛØ§Ø±Û از ÙÛÚÚ¯ÛâÙØ§Û دÛگر را ب٠ÙÙ
را٠دارد Ú©Ù Ø¨Ø¹Ø¯Ø§Ù Ø¨Ø±Ø±Ø³Û Ø®ÙØ§ÙÛÙ
کرد.
Ø¨ÛØ§Ù Ú©ÙØ§Ø³
درست ٠اÙÙØ¯ ØªÙØ§Ø¨Ø¹Ø Ú©ÙØ§Ø³âÙØ§ را Ù ÛâØªÙØ§Ù در ÛÚ© عبارت دÛگر تعرÛÙ Ú©Ø±Ø¯Ø Ø§Ø±Ø³Ø§Ù Ú©Ø±Ø¯Ø Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ø ØªØ®ØµÛØµ داد Ù ØºÛØ±Ù.
در اÛÙØ¬Ø§ ÙÙ ÙÙÙâØ§Û Ø§Ø² عبارت Ú©ÙØ§Ø³ Ø¢ÙØ±Ø¯Ù شد٠است:
let User = class {
sayHi() {
alert("Ø³ÙØ§Ù
");
}
};
شبÛ٠ب٠عبارتâÙØ§Û تابع ÙØ§Ù âÚ¯Ø°Ø§Ø±Û Ø´Ø¯ÙØ عبارات Ú©ÙØ§Ø³ ٠٠ک٠است ÛÚ© ÙØ§Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯.
اگر ÛÚ© عبارت Ú©ÙØ§Ø³ Ø¯Ø§Ø±Ø§Û ÙØ§Ù Ø¨Ø§Ø´Ø¯Ø ÙÙØ· در Ø¯Ø§Ø®Ù Ú©ÙØ§Ø³ ÙØ§Ø¨Ù Ù Ø´Ø§ÙØ¯Ù است:
// «عبارت Ú©ÙØ§Ø³ ÙØ§Ù
Ú¯Ø°Ø§Ø±Û Ø´Ø¯Ù»
// (ÚÙÛÙ Ø§ØµØ·ÙØ§ØÛ در Ù
شخصات ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯Ø اÙ
ا شبÛ٠ب٠عبارت تابع ÙØ§Ù
Ú¯Ø°Ø§Ø±Û Ø´Ø¯Ù Ø§Ø³Øª)
let User = class MyClass {
sayHi() {
alert(MyClass); // ÙÙØ· در Ø¯Ø§Ø®Ù Ú©ÙØ§Ø³ ÙØ§Ø¨Ù Ù
Ø´Ø§ÙØ¯Ù است MyClass ÙØ§Ù
}
};
new User().sayHi(); // را ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯ MyClass کار Ù
Û Ú©ÙØ¯Ø تعرÛÙ
alert(MyClass); // خارج از Ú©ÙØ§Ø³ ÙØ§Ø¨Ù Ù
Ø´Ø§ÙØ¯Ù ÙÛØ³Øª MyClass Ø®Ø·Ø§Ø ÙØ§Ù
٠ا ØØªÛ Ù ÛâØªÙØ§ÙÛÙ Ú©ÙØ§Ø³âÙØ§ را Ø¨Ù ØµÙØ±Øª Ù¾ÙÛØ§ âØ¨Ø± اساس ØªÙØ§Ø¶Ø§â بسازÛÙ Ø Ù Ø§ÙÙØ¯ اÛÙ:
function makeClass(phrase) {
// ÛÚ© Ú©ÙØ§Ø³ تعرÛÙ Ú©ÙÛØ¯ ٠آ٠را برگرداÙÛØ¯
return class {
sayHi() {
alert(phrase);
}
};
}
// Create a new class
let User = makeClass("Ø³ÙØ§Ù
");
new User().sayHi(); // Ø³ÙØ§Ù
Ú¯ÛØ±ÙدÙ/ ØªÙØ¸ÛÙ Ú©ÙÙØ¯Ù
درست ٠اÙÙØ¯ Ø§Ø´ÛØ§Ø¡ ØªØØª اÙÙÙØ¸ÛØ Ú©ÙØ§Ø³âÙØ§ ٠٠ک٠است Ø´Ø§Ù Ù Ú¯ÛØ±ÙدÙâÙØ§/ØªÙØ¸ÛÙ Ú©ÙÙØ¯ÙâÙØ§Ø Ø®ØµÙØµÛات Ù ØØ§Ø³Ø¨Ù Ø´Ø¯Ù Ù ØºÛØ±Ù Ø¨Ø§Ø´ÙØ¯.
در اÛÙØ¬Ø§ ÛÚ© Ù
Ø«Ø§Ù Ø¨Ø±Ø§Û user.name است ک٠با Ø§Ø³ØªÙØ§Ø¯Ù از get/set Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ø´Ø¯Ù Ø§Ø³Øª:
class User {
constructor(name) {
// ØªÙØ¸ÛÙ
Ú©ÙÙØ¯Ù را ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâÚ©ÙØ¯
this.name = name;
}
get name() {
return this._name;
}
set name(value) {
if (value.length < 4) {
alert("ÙØ§Ù
Ø¨Ø³ÛØ§Ø± Ú©ÙØªØ§Ù است.");
return;
}
this._name = value;
}
}
let user = new User("John");
alert(user.name); // John
user = new User(""); // .ÙØ§Ù
Ø¨Ø³ÛØ§Ø± Ú©ÙØªØ§Ù است
از ÙØ¸Ø± ÙÙÛØ ÚÙÛÙ ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙØ§Ø³ با Ø§ÛØ¬Ø§Ø¯ Ú¯ÛØ±ÙØ¯Ù Ù ØªÙØ¸ÛÙ
Ú©ÙÙØ¯Ù در User.prototype کار Ù
ÛâÚ©ÙØ¯.
ÙØ§Ù âÙØ§Û Ù ØØ§Ø³Ø¨Ù شد٠[â¦]
در اÛÙØ¬Ø§ ÛÚ© Ù
ثا٠با ÙØ§Ù
Ù
تد Ù
ØØ§Ø³Ø¨Ù شد٠با Ø§Ø³ØªÙØ§Ø¯Ù از براکت [...] Ø¢ÙØ±Ø¯Ù شد٠است:
class User {
['say' + 'Hi']() {
alert("Ø³ÙØ§Ù
");
}
}
new User().sayHi();
ب٠خاطر سپرد٠ÚÙÛÙ ÙÛÚÚ¯ÛâÙØ§ÛÛ Ø¢Ø³Ø§Ù Ø§Ø³ØªØ Ø²ÛØ±Ø§ Ø¢ÙÙØ§ شبÛÙ Ø¨Ù Ø§Ø´ÛØ§Ø¡ ØªØØª اÙÙÙØ¸Û ÙØ³ØªÙد.
ÙÛÙØ¯ÙØ§Û Ú©ÙØ§Ø³
ÙÛÙØ¯ÙØ§Û Ú©ÙØ§Ø³ Ø§Ø®ÛØ±Ø§ ب٠زبا٠اضاÙÙ Ø´Ø¯Ù ÙØ³ØªÙد.
ÙØ¨ÙØ§Ø Ú©ÙØ§Ø³âÙØ§Û ٠ا ÙÙØ· ٠تد Ø¯Ø§Ø´ØªÙØ¯.
âÙÛÙØ¯ÙØ§Û Ú©ÙØ§Ø³â سÛÙØªÚ©Ø³Û است ک٠اجاز٠٠ÛâØ¯ÙØ¯ ÙØ± ÙÛÚÚ¯Û Ø±Ø§ اضاÙÙ Ú©ÙÛØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اجاز٠دÙÛØ¯ ÙÛÚÚ¯Û name را ب٠class User اضاÙÙ Ú©ÙÛÙ
:
class User {
name = "John";
sayHi() {
alert(`Hello, ${this.name}!`);
}
}
new User().sayHi(); // Hello, John!
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ Ù
ا ÙÙØ· â
ØªÙØ§Ùت Ù
ÙÙ
ÙÛÙØ¯ÙØ§Û Ú©ÙØ§Ø³ در اÛ٠است ک٠آÙÙØ§ بر رÙÛ Ø§Ø´ÛØ§Ø¡ جداگاÙÙ ØªÙØ¸ÛÙ
Ù
ÛâØ´ÙÙØ¯Ø ÙÙ User.prototype:
class User {
name = "John";
}
let user = new User();
alert(user.name); // John
alert(User.prototype.name); // undefined
ÙÙ ÚÙÛÙ Ù ÛâØªÙØ§ÙÛ٠با Ø§Ø³ØªÙØ§Ø¯Ù از عبارات Ù ÙØ±Ø§Ø®ÙاÙÛâÙØ§Û ØªÙØ§Ø¨Ø¹ Ù¾ÛÚÛØ¯ÙâØªØ±Ø Ù ÙØ§Ø¯ÛØ±Û Ø±Ø§ اختصاص دÙÛÙ :
class User {
name = prompt("ÙØ§Ù
Ø ÙØ·ÙاØ", "John");
}
let user = new User();
alert(user.name); // John
ساخت Ù ØªØ¯ÙØ§Û Ù ØØ¯Ùد با ÙÛÙØ¯ÙØ§Û Ú©ÙØ§Ø³
ÙÙ
Ø§ÙØ·Ùر ک٠در ÙØµÙ ÙØ´Ø§Ù داد٠شد ØªÙØ§Ø¨Ø¹ Ù¾ÛÙÙØ¯ تابع در Ø¬Ø§ÙØ§âاسکرÛپت Ø¯Ø§Ø±Ø§Û this Ù¾ÙÛØ§ ÙØ³ØªÙد. Ø¨Ø³ØªÚ¯Û Ø¨Ù Ø²Ù
ÛÙÙ ÙØ±Ø§Ø®ÙاÙÛ Ø¯Ø§Ø±Ø¯.
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ اگر ÛÚ© Ù
تد Ø´ÛØ¡ Ù
ÙØªÙÙ Ø´ÙØ¯ ٠در زÙ
ÛÙ٠دÛÚ¯Ø±Û ÙØ±Ø§Ø®ÙاÙÛ Ø´ÙØ¯Ø this دÛگر Ø§Ø±Ø¬Ø§Ø¹Û Ø¨Ù Ø´ÛØ¡ Ø¢Ù ÙØ®ÙØ§ÙØ¯ Ø¨ÙØ¯.
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ اÛ٠کد undefined را ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯:
class Button {
constructor(value) {
this.value = value;
}
click() {
alert(this.value);
}
}
let button = new Button("Ø³ÙØ§Ù
");
setTimeout(button.click, 1000); // undefined
Ù
Ø´Ú©Ù âØ§Ø² دست داد٠thisâ ÙØ§Ù
ÛØ¯Ù Ù
ÛâØ´ÙØ¯.
ÙÙ Ø§ÙØ·Ùر ک٠در ÙØµÙ Ù¾ÛÙÙØ¯ تابع Ù ÙØ±Ø¯ Ø¨ØØ« ÙØ±Ø§Ø± Ú¯Ø±ÙØªØ Ø¯Ù Ø±ÙØ´ Ø¨Ø±Ø§Û Ø±ÙØ¹ Ø¢Ù ÙØ¬Ùد دارد:
- ÛÚ© تابع Ø¯Ø±Ø¨Ø±Ú¯ÛØ±Ùد٠Ù
اÙÙØ¯
setTimeout(() => button.click(), 1000)را Ø¹Ø¨ÙØ± دÙÛØ¯. - ٠تد را Ø¨Ù Ø´ÛØ¡ ٠تص٠کÙÛØ¯Ø ب٠عÙÙØ§Ù ٠ثاÙ. در Ø³Ø§Ø²ÙØ¯Ù
ÙÛÙØ¯ÙØ§Û Ú©ÙØ§Ø³Ø سÛÙØªÚ©Ø³ Ø¨Ø³ÛØ§Ø± ظرÛ٠دÛÚ¯Ø±Û Ø±Ø§ ارائ٠٠ÛâØ¯ÙÙØ¯:
class Button {
constructor(value) {
this.value = value;
}
click = () => {
alert(this.value);
}
}
let button = new Button("Ø³ÙØ§Ù
");
setTimeout(button.click, 1000); // Ø³ÙØ§Ù
ÙÛÙØ¯ Ú©ÙØ§Ø³ click = () => {...} بر اساس ÙØ± Ø´ÛØ¡ Ø§ÛØ¬Ø§Ø¯ Ù
ÛâØ´ÙØ¯Ø ÛÚ© تابع جداگاÙÙ Ø¨Ø±Ø§Û ÙØ± Ø´ÛØ¡ Button ÙØ¬Ùد دارد Ú©Ù this در Ø¯Ø§Ø®Ù Ø¢Ù Ø¨Ù Ø¢Ù Ø´ÛØ¡ ارجاع Ù
ÛâØ¯ÙØ¯. Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
button.click را Ø¨Ù ÙØ±âجاÛÛ Ù
ÙØªÙÙ Ú©ÙÛÙ
Ø Ù Ù
ÙØ¯Ø§Ø± this ÙÙ
ÛØ´Ù درست Ø®ÙØ§Ùد Ø¨ÙØ¯.
اÛ٠ب٠ÙÛÚ٠در Ù ØÛØ· Ù Ø±ÙØ±Ú¯Ø±Ø Ø¨Ø±Ø§Û Ø´ÙÙÙØ¯Ú¯Ø§Ù رÙÛØ¯Ø§Ø¯ Ù ÙÛØ¯ است.
Ø®ÙØ§ØµÙ
سÛÙØªÚ©Ø³ Ú©ÙØ§Ø³ پاÛÙ Ø¨Ù Ø´Ú©Ù Ø²ÛØ± است:
class MyClass {
prop = value; // ÙÛÚÚ¯Û
constructor(...) { // Ø³Ø§Ø²ÙØ¯Ù
// ...
}
method(...) {} // Ù
تد
get something(...) {} // Ù
تد Ú¯ÛØ±ÙدÙ
set something(...) {} // Ù
تد ØªÙØ¸ÛÙ
Ú©ÙÙØ¯Ù
[Symbol.iterator]() {} // (Symbol در اÛÙØ¬Ø§) Ù
تد با ÙØ§Ù
Ù
ØØ§Ø³Ø¨Ù شدÙ
// ...
}
MyClass از ÙØ¸Ø± ÙÙÛ ÛÚ© تابع است (ØªÙØ§Ø¨Ø¹Û Ú©Ù Ù
ا ب٠عÙÙØ§Ù constructor ارائ٠Ù
ÛâÚ©ÙÛÙ
)Ø Ø¯Ø± ØØ§ÙÛ Ú©Ù Ù
ØªØ¯ÙØ§Ø Ø¯Ø±ÛØ§Ùت Ú©ÙÙØ¯ÙâÙØ§ Ù ØªÙØ¸ÛÙ
Ú©ÙÙØ¯ÙâÙØ§ در MyClass.prototype ÙÙØ´ØªÙ Ù
ÛâØ´ÙÙØ¯.
در ÙØµÙâÙØ§Û Ø¨Ø¹Ø¯Û Ø¯Ø±Ø¨Ø§Ø±Ù Ú©ÙØ§Ø³âÙØ§Ø از ج٠ÙÙ ÙØ±Ø§Ø«Øª Ù Ø³Ø§ÛØ± ÙÛÚÚ¯ÛâÙØ§ Ø¨ÛØ´ØªØ± Ø®ÙØ§ÙÛÙ Ø¢Ù ÙØ®Øª.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)