ÙÙØ¬Ø¯ ÙÙØ¹ÙÙ Ù Ù Ø§ÙØ®ØµØ§Ø¦Øµ.
اÙÙÙØ¹ Ø§ÙØ«Ø§ÙÙ Ù Ù Ø§ÙØ®ØµØ§Ø¦Øµ ÙÙ Ø´ÙØ¦ ٠ا Ø¬Ø¯ÙØ¯. Ù ÙÙ accessor properties. ÙÙ Ø¯ÙØ§Ù بشÙÙ Ø£Ø³Ø§Ø³Ù ØªØ¬ÙØ¨ اÙÙÙÙ Ù ØªØ¶Ø¨Ø·ÙØ§, ÙÙÙÙ Ù٠اÙÙÙØ¯ ØªØ¸ÙØ±Ù ÙÙØ§ ÙÙØ£ÙÙØ§ خصائص Ø¹Ø§Ø¯ÙØ©.
Ø§ÙØ¬Ø§Ùبات ÙØ§Ùضابطات
خصائص اÙÙØµÙ٠تÙ
ث٠ب٠âgetterâ Ù âsetterâ. ÙØ´Ø§Ø± Ø¥ÙÙÙÙ
داخ٠اÙÙØ§Ø¦Ù ب٠get and set:
let obj = {
get propName() {
// â«Ø¬Ø§ÙØ¨Ø ÙÙØ³ØªØ¹Ù
ÙÙ ÙØ¬Ùب ÙÙÙ
Ø© Ø§ÙØ®Ø§ØµÙØ© obj.propName
},
set propName(value) {
// â«Ø¶Ø§Ø¨Ø· ÙÙØ³ØªØ¹Ù
ÙÙ ÙØ¶Ø¨Ø· ÙÙÙ
Ø© Ø§ÙØ®Ø§ØµÙØ© obj.propName Ø¥ÙÙ value
}
};
ÙØ³ØªØ¹Ù
Ù Ø§ÙØ¬Ø§Ùب Ø¹ÙØ¯ ÙØ±Ø§Ø¡Ø© Ø§ÙØ®Ø§ØµÙØ© obj.propName, Ø§ÙØ¶Ø§Ø¨Ø· â Ø¹Ùد ضبط Ø£Ù Ø¥Ø³ÙØ§Ø¯ ÙÙÙ
Ø© تÙÙ Ø§ÙØ®Ø§ØµÙØ©.
ÙØ§ØØ¸ Ù
Ø«ÙØ§, ÙØ¯ÙÙØ§ ÙØ§Ø¦Ù user Ù ÙØ¯ÙÙ name Ù surname:
let user = {
name: 'John',
surname: 'Smith',
};
Ø§ÙØ¢Ù ÙØ±Ùد Ø¥Ø¶Ø§ÙØ© Ø®Ø§ØµÙØ© Ø§ÙØ§Ø³Ù
اÙÙØ§Ù
Ù fullName, Ø§ÙØªÙ ÙØ¬Ø¨ ا٠تÙÙÙ "John Smith". Ø¨Ø§ÙØ·Ø¨Ø¹, Ø·Ø¨Ø¹ÙØ§ ÙØ§ ÙØ±Ùد ÙØ³Ø® اÙÙ
عÙÙÙ
ات ÙÙØµÙÙØ§, ÙØ°Ø§ سÙÙÙÙØ°Ùا باستخداÙ
Ø®Ø§ØµÙØ© اÙÙØµÙÙ (Ùget) :
let user = {
name: "John",
surname: "Smith",
get fullName() {
return `${this.name} ${this.surname}`;
}
};
alert(user.fullName); // John Smith
Ù
Ù Ø§ÙØ®Ø§Ø±Ø¬, ÙØ§ ØªØ¨Ø¯Ù Ø®Ø§ØµÙØ© اÙÙØµÙÙ Ø¥ÙØ§ Ø®Ø§ØµÙØ© Ø¹Ø§Ø¯ÙØ©. ÙÙØ°Ø§ Ø¨Ø§ÙØ¶Ø¨Ø· Ø§ÙØºØ±Ø¶ Ù
Ù ÙØ°Ù Ø§ÙØ®ØµØ§Ø¦Øµ. ÙÙØ³Ùا ÙØ±Ùد إستدعاء user.fullName عÙ٠أÙÙÙØ§ Ø¯Ø§ÙØ©, Ø¨Ù ÙØ±Ø§Ø¡ØªÙا بشÙÙ Ø·Ø¨ÙØ¹Ù: ÙÙØªØ±Ù Ø§ÙØ¬Ø§Ùب ÙÙÙÙ
بعÙ
ÙÙ Ø®Ù٠اÙÙÙØ§ÙÙØ³.
ØØªÙ Ø§ÙØ¢Ù, fullName ÙØ¯ÙÙØ§ ÙÙØ· Ø¬Ø§ÙØ¨. ÙÙ ØØ§ÙÙÙØ§ Ø¥Ø³ÙØ§Ø¯ ÙÙÙ
Ø© ÙÙØ§ ع٠طرÙÙ user.fullName=, سÙÙ ÙØØ¯Ø« خطأ:
let user = {
get fullName() {
return `...`;
}
};
user.fullName = "Test"; // خطأ (ÙÙØ®Ø§ØµÙØ© Ø¬Ø§ÙØ¨ ÙÙØ·)
ÙÙÙØ§ ÙÙØµÙØ Ø§ÙØ®Ø·Ø£ ÙÙÙØ¶ÙÙ Ø¶Ø§Ø¨Ø·ÙØ§ ÙÙØ®Ø§ØµÙØ© user.fullName:
let user = {
name: "John",
surname: "Smith",
get fullName() {
return `${this.name} ${this.surname}`;
},
set fullName(value) {
[this.name, this.surname] = value.split(" ");
}
};
// ضبط fullName تÙ
باÙÙÙÙ
Ø© اÙÙ
عطاÙ.
user.fullName = "Alice Cooper";
alert(user.name); // Alice
alert(user.surname); // Cooper
Ù ÙØªÙجة ÙØ°ÙÙ, ÙØ¯ÙÙØ§ Ø®Ø§ØµÙØ© âÙÙÙ
ÙØ©â fullName. ÙÙ
ÙÙÙØ§ ÙØ±Ø§Ø¡ØªÙا ÙØ§ÙÙØªØ§Ø¨Ø© عÙÙÙØ§Ø ÙÙÙÙÙØ§ ÙÙ ÙØ§Ùع Ø§ÙØ£Ù
Ø±Ø ØºÙØ± Ù
ÙØ¬Ùدة.
ÙØ§ØµÙات اÙÙØµÙÙ (Accessor Descriptors)
ÙØ§ØµÙÙØ§Øª خصائص اÙÙØµÙÙ (Accessor Properties) تختÙÙ Ø¹Ù ÙØ§ØµÙÙØ§Øª خصائص Ø§ÙØ¨ÙØ§ÙØ§Øª (Data Properties).
باÙÙØ³Ø¨Ø© ÙØ®ØµØ§Ø¦Øµ اÙÙØµÙÙ, ÙØ§ ÙÙØ¬Ø¯ value ا٠writable, Ù ÙÙÙ Ø¨Ø¯ÙØ§Ù Ù
٠ذÙÙ ÙÙØ¬Ø¯ Ø¯ÙØ§Ù get Ù set.
Ø£Ù, ÙØ§ØµÙ اÙÙØµÙÙ ÙÙ Ù٠ا٠Ù٠تÙ٠٠ا ÙÙÙ:
getâ Ø¯Ø§ÙÙ ÙØ§ ØªØ³ØªÙØ¨Ù ÙÙÙ , Ù ØªØ¹Ù Ù Ø¹ÙØ¯ ÙØ±Ø§Ø¡Ø© Ø§ÙØ®Ø§ØµÙØ©,setâ Ø¯Ø§ÙÙ ØªØ³ØªÙØ¨Ù ÙÙÙ Ø© ÙØ§ØØ¯Ø©, Ù ØªØ¹Ù Ù Ø¹ÙØ¯ إرادة ضبة Ø§ÙØ®Ø§ØµÙØ©,enumerableâ Ø®Ø§ØµÙØ© ÙØ§Ø¨ÙÙØ© Ø§ÙØ¥ØØµØ§Ø¡ ÙÙÙ Ù Ø´Ø§Ø¨ÙØ© ÙØ®Ø§ØµÙÙØ§Øª Ø§ÙØ¨ÙØ§ÙØ§Øª,configurableâ Ø®Ø§ØµÙØ© ÙØ§Ø¨ÙÙØ© إعادة Ø§ÙØ¶Ø¨Ø· ÙÙÙ Ù Ø´Ø§Ø¨ÙØ© ÙØ®Ø§ØµÙÙØ§Øª Ø§ÙØ¨ÙØ§ÙØ§Øª.
ÙÙ
Ø«ÙØ§Ù, ÙÙÙÙØ´Ø¦ Ø®Ø§ØµÙØ© اÙÙØµÙÙ fullName بإستخداÙ
defineProperty, ÙÙ
Ù٠أ٠ÙÙÙ
رر ÙØ§ØµÙا٠Ù
ث٠get ٠set:
let user = {
name: "John",
surname: "Smith"
};
Object.defineProperty(user, 'fullName', {
get() {
return `${this.name} ${this.surname}`;
},
set(value) {
[this.name, this.surname] = value.split(" ");
}
});
alert(user.fullName); // John Smith
for(let key in user) alert(key); // name, surname
ÙØ±Ø¬Ù Ù
ÙØ§ØØ¸Ø© Ø£Ù Ø§ÙØ®Ø§ØµÙØ© ÙÙ
Ù٠ا٠تÙÙÙ Ø®Ø§ØµÙØ© ÙØµÙÙ (ÙÙØ§ طر٠get/set) Ø§Ù Ø®Ø§ØµÙØ© Ø¨ÙØ§Ùات (ÙØ¯ÙÙØ§ value), Ù ÙÙÙ ÙÙØ³ ÙÙØ§ÙÙ
ا.
ÙÙ ØØ§ÙÙÙØ§ ØªÙØ¯ÙÙ
get Ù value Ù
عا٠ÙÙ ÙÙØ³ اÙÙØ§ØµÙ, سÙÙ ÙØØ¯Ø« خطأ:
// خطأ: ÙØ§ØµÙÙ Ø§ÙØ®Ø§ØµÙØ© ØºÙØ± ØµØ§ÙØ.
Object.defineProperty({}, 'prop', {
get() {
return 1
},
value: 2
});
Ø§ÙØ¬ÙØ§ÙØ¨ ÙØ§ÙØ¶ÙØ§Ø¨Ø· Ø§ÙØ°ÙÙØ©
ÙÙ ÙÙÙØ§ Ø§Ø³ØªØ¹Ù Ø§Ù Ø§ÙØ¬ÙØ§ÙØ¨ ÙØ§ÙØ¶ÙØ§Ø¨Ø· ÙØ£ØºÙÙØ© ÙÙÙÙ Ø§ÙØ®Ø§ØµÙات âØ§ÙÙØ¹ÙÙØ©â ÙÙÙ ØªØ³ØªØ·ÙØ¹ Ø§ÙØªØÙÙ Ø§ÙØ«Ø± ÙÙ Ø§ÙØ¹Ù ÙÙØ§Øª بÙÙÙÙ .
ÙÙ
Ø«ÙØ§Ù, إذا Ø§Ø±Ø¯ÙØ§ Ù
ÙØ¹ Ø§ÙØ£Ø³Ù
اء اÙÙØµÙرة ÙÙ user, ÙÙÙ
Ù٠ا٠ÙÙÙÙ ÙØ¯ÙÙØ§ Ø§ÙØ¶Ø§Ø¨Ø· name ٠تر٠اÙÙÙÙ
Ù ÙÙ Ø®Ø§ØµÙØ© Ù
ÙÙØµÙØ© _name:
let user = {
get name() {
return this._name;
},
set name(value) {
if (value.length < 4) {
alert('Name is too short, need at least 4 characters');
return;
}
this._name = value;
},
};
user.name = 'Pete';
alert(user.name); // Pete
user.name = ''; // ...Ø§ÙØ¥Ø³Ù
ÙØµÙر جدا
إذاÙ, سÙÙ ÙØªØ®Ø²Ù Ø§ÙØ¥Ø³Ù
ÙÙ Ø®Ø§ØµÙØ© _name, ٠اÙÙØµÙ٠سÙÙ ÙÙÙ٠ع٠طرÙÙ Ø§ÙØ¬Ø§Ùبات Ù Ø§ÙØ¶Ø§Ø¨Ø·Ø§Øª.
عÙ
ÙÙØ§Ù, اÙÙÙØ¯ Ø§ÙØ®Ø§Ø±Ø¬Ù ÙÙ
ÙÙ Ø§Ù ÙØµÙ اÙÙ Ø§ÙØ¥Ø³Ù
بشÙÙ Ù
باشر ع٠طرÙ٠إستخداÙ
user._name. ÙÙÙÙ ÙÙØ§Ù Ù
ÙÙÙÙ
شائع Ù٠أÙÙ Ø§ÙØ®Ø§ØµÙات Ø§ÙØªÙ تبدأ بشرطة سÙÙÙØ© "_" ÙÙ Ø®Ø§ØµÙØ§Øª داخÙÙØ© ÙÙ
Ù
ÙÙØ¹ Ø§ÙØªØ¹Ø¯Ù٠عÙÙÙØ§ Ù
٠خارج اÙÙØ§Ø¦Ù.
استع٠اÙÙØ§ ÙØºØ±Ø¶ Ø§ÙØªÙاÙÙÙØ©
Ø¥ØØ¯Ù Ø§Ø³ØªØ¹Ù Ø§ÙØ§Øª Ø®Ø§ØµÙØ§Øª اÙÙØµÙÙ ÙØ°Ù ÙÙ Ø¥ØªØ§ØØ© اÙÙØ±ØµØ© ÙÙØªØÙÙÙ Ø¨Ø®Ø§ØµÙØ© Ø¨ÙØ§Ùات âØ¹Ø§Ø¯ÙØ©â Ù ØªÙ Ø£Ø±Ø¯ÙØ§ ÙØ§Ø³ØªØ¨Ø¯Ø§ÙÙØ§ Ø¨Ø¯Ø§ÙØªÙ Ø¬ÙØ¨ ÙØ¶Ø¨Ø· ÙØªØ¹Ø¯Ù٠سÙÙÙÙØ§.
ÙÙÙÙ Ù
Ø«ÙÙØ§ بأÙÙØ§ Ø¨Ø¯Ø£ÙØ§ اÙÙ
Ø´Ø±ÙØ¹ ØÙØ« ÙØ§Ùت ÙØ§Ø¦Ùات اÙÙ
ستخدÙ
Ù٠تستعÙ
Ù Ø®Ø§ØµÙØ§Øª Ø§ÙØ¨ÙØ§ÙØ§Øª name and age:
function User(name, age) {
this.name = name;
this.age = age;
}
let john = new User('John', 25);
alert(john.age); // 25
â¦Ù ÙÙÙ Ø¹Ø§Ø¬ÙØ§Ù اÙ
Ø¢Ø¬ÙØ§Ù, ÙÙ
ÙÙ Ø£Ù ØªØªØºÙØ± Ø§ÙØ£Ù
ÙØ±. Ø¨Ø¯ÙØ§Ù Ù
Ù age ÙÙ
Ù٠ا٠ÙÙØ±Ø± Ø§ÙØªØ®Ø²ÙÙ ÙÙ birthday, ÙØ£ÙÙ Ø§ÙØ«Ø± دÙ٠٠سÙÙÙÙ ÙÙ Ø§ÙØ¥Ø³ØªØ¹Ù
اÙ:
function User(name, birthday) {
this.name = name;
this.birthday = birthday;
}
let john = new User('John', new Date(1992, 6, 1));
Ù ÙÙÙ Ù
اذا ÙÙØ¹Ù Ù
ع اÙÙÙØ¯ اÙÙØ¯ÙÙ
Ø§ÙØ°Ù Ù
ا Ø²Ø§Ù ÙØ³ØªØ®Ø¯Ù
Ø®Ø§ØµÙØ© ageØ
ÙÙ
ÙÙ Ø¥Ù ÙØ¨ØØ« ع٠ÙÙ Ø§ÙØ£Ù
اÙÙ Ø§ÙØªÙ تستخدÙ
ÙØ§ Ù ÙÙÙÙ
Ø¨Ø§ÙØ¥ØµÙاØ, Ù ÙÙ٠ذÙ٠سÙÙ ÙØªØºØ±Ù اÙÙÙØª Ù ÙÙ
Ù٠ا٠ÙÙÙÙ Ù
Ù Ø§ÙØµØ¹Ø¨ تÙÙÙØ°Ù إذا ÙØ§Ù ÙØ°Ø§ اÙÙÙØ¯ ÙØ³ØªØ®Ø¯Ù
٠اشخاص آخرÙÙ. ÙÙ
ا Ø¥Ù ÙØ¬Ùد عÙ
ر اÙÙ
ستخدÙ
, age داخ٠user Ù٠اÙ
ر Ø¬ÙØ¯, اÙÙØ³ ÙØ°ÙÙ Ø
Ø¯Ø¹ÙØ§ ÙØ¨ÙÙ Ø§ÙØ®Ø§ØµÙØ© Ù٠ا ÙÙ.
Ø¥Ø¶Ø§ÙØ© Ø¬Ø§ÙØ¨ ÙÙØ®Ø§ØµÙØ© age سÙÙ ÙÙÙÙ
بØÙ اÙÙ
Ø´ÙÙØ©:
function User(name, birthday) {
this.name = name;
this.birthday = birthday;
// Ø§ÙØ¹Ù
ر Ù٠اÙÙØ±Ù بÙÙ Ø§ÙØªØ§Ø±ÙØ® اÙÙÙÙ
ÙØªØ§Ø±ÙØ® اÙÙ
ÙÙØ§Ø¯
Object.defineProperty(this, "age", {
get() {
let todayYear = new Date().getFullYear();
return todayYear - this.birthday.getFullYear();
}
});
}
let john = new User("John", new Date(1992, 6, 1));
alert( john.birthday ); // ØªØ§Ø±ÙØ® اÙÙ
ÙÙØ§Ø¯ Ù
ÙØ¬Ùد
alert( john.age ); // ...ÙØ¹Ù
ر اÙÙ
ستخدÙ
Ø£ÙØ¶Ùا
Ø§ÙØ¢Ù اÙÙÙØ¯ اÙÙØ¯ÙÙ ÙØ¹Ù Ù Ø¥ÙØ¶Ø§Ù Ù ÙØ¯ÙÙØ§ Ø®Ø§ØµÙØ© إضاÙÙØ© ÙØ·ÙÙÙ.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)