You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/06-constructor-new/article.md
+18-30Lines changed: 18 additions & 30 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,7 +44,7 @@ isAdmin: false
44
44
};
45
45
```
46
46
الآن، إن أردنا إنشاء مستخدمين آخرين، يمكننا استدعاء `new User("Ann")`، و `new User("Alice")` وهكذا. تعدُّ هذه
47
-
الطريقة في بناء الكائنات أقصر من الطريقة الاعتيادية عبر الأقواس فقط، وأيضًا أسهل للقراءة. هذا هو الغرض الرئيسي للبانيات،
47
+
الطريقة في بناء الكائنات أقصر من الطريقة الاعتيادية عبر الأقواس فقط، وأيضًا أسهل للقراءة. هذا هو الغرض الرئيس للبانيات،
48
48
وهي تطبيق شيفرة قابلة لإعادة الاستخدام لإنشاء الكائنات.
49
49
لاحظ أنَّه يمكن استخدام أي دالة لتكون دالة بانية تقنيًا. يعني أنه يمكن تنفيذ أي دالة مع `new`، وستُنَفَّذ باستخدام الخوارزمية أعلاه.
50
50
استخدام الأحرف الكبيرة في البداية هو اتفاق شائع لتمييز الدالة البانية من غيرها وأنَّه يجب استدعاؤها مع `new`.
@@ -60,12 +60,10 @@ this.isAdmin = false;
60
60
// متغيرات محلية وهكذا..
61
61
};
62
62
```
63
-
لا يمكن استدعاء المُنشِئ مجددًا، لأنه غير محفوظ في أي مكان، يُنشَأ ويُستدعى فقط. لذا فإن الخدعة تهدف لتضمين الشيفرة التي
64
-
تُنشِئ كائنًا واحدًا، دون إعادة الاستخدام وتكرار العملية مستقبلًا.
63
+
لا يمكن استدعاء المُنشِئ مجددًا، لأنه غير محفوظ في أي مكان، يُنشَأ ويُستدعى فقط. لذا فإن الخدعة تهدف إلى تضمين الشيفرة التي تُنشِئ كائنًا واحدًا، دون إعادة الاستخدام وتكرار العملية مستقبلًا.
65
64
## وضع اختبار الباني: `new.target`
66
65
**ميزة متقدمة**: تُستخدم الصيغة في هذا الجزء نادرًا، ويمكنك تخطيها إلا إن كنت تُريد الإلمام بكل شيء.
67
-
يمكننا فحص ما إن كانت الدالة قد استدعيت باستخدام `new` أو دونه من داخل الدالة، وذلك باستخدام الخاصية الخاصة
68
-
`new.target`.
66
+
يمكننا فحص ما إن كانت الدالة قد استدعيت باستخدام `new` أو دونه من داخل الدالة، وذلك باستخدام الخاصية الخاصة `new.target`.
69
67
تكون الخاصية فارغة في الاستدعاءات العادية، وتساوي الدالة البانية إذا استُدعِيَت باستخدام `new`:
70
68
71
69
```
@@ -78,8 +76,8 @@ User(); // undefined
78
76
new User(); // function User { ... }
79
77
```
80
78
81
-
يمكن استخدام ذلك بداخل الدالة لمعرفة إن استُدعِيَت مع `new`، "في وضع بناء كائن"، أو بدونه "في الوضع العادي".
82
-
يمكننا أيضًا جعل كلًا من الاستدعاء العادي و`new` ينفِّذان الأمر ذاته -بناء كائن- هكذا:
79
+
يمكن استخدام ذلك بداخل الدالة لمعرفة إن استُدعِيَت مع `new`، "في وضع بناء كائن"، أو دونه "في الوضع العادي".
80
+
يمكننا أيضًا جعل كلًا من الاستدعاء العادي و`new` ينفِّذان الأمر ذاته -بناء كائن- هكذا:
83
81
84
82
```
85
83
function User(name) {
@@ -91,17 +89,13 @@ this.name = name;
91
89
let john = User("John"); // new User تُوَجِّه الاستدعاء إلى
92
90
alert(john.name); // John
93
91
```
94
-
يستخدم هذا الاسلوب في بعض المكتبات أحيانًا لجعل الصيغة أكثر مرونة حتى يتمكن الأشخاص من استدعاء الدالة مع `new` أو
95
-
بدونه، وتظل تعمل.
96
-
ربما ليس من الجيد استخدام ذلك في كل مكان، لأن حذف `new` يجعل ما يحدث أقل وضوحًا. لكن مع `new`، يعلم الجميع أن
97
-
كائنًا جديدًا قد أُنشِئ.
92
+
يستخدم هذا الأسلوب في بعض المكتبات أحيانًا لجعل الصيغة أكثر مرونة حتى يتمكن الأشخاص من استدعاء الدالة مع `new` أو دونه، وتظل تعمل.
93
+
ربما ليس من الجيد استخدام ذلك في كل مكان، لأن حذف `new` يجعل ما يحدث أقل وضوحًا. لكن مع `new`، يعلم الجميع أن كائنًا جديدًا قد أُنشِئ.
98
94
## ما تُرجِعه الدوال البانية
99
-
لا تملك الدوال البانية عادةً التعليمة `return`. فَمُهِمَتُهَا هي كتابة الأمور المهمة إلى `this`، وتصبح تلقائيًا هي النتيجة. لكن إن
100
-
كان هناك التعليمة `return` فإن القاعدة بسيطة:
95
+
لا تملك الدوال البانية عادةً التعليمة `return`. فَمُهِمَتُهَا هي كتابة الأمور المهمة إلى `this`، وتصبح تلقائيًا هي النتيجة. لكن إن كان هناك التعليمة `return` فإن القاعدة سهلة:
101
96
- إن استُدعِيَت `return` مع كائن، يُرجَع الكائن بدلًا من `this`.
102
97
- إن استُدعِيَت `return` مع متغير أولي، يُتَجاهَل.
103
-
بمعنىً آخر، `return` مع كائن يُرجَع الكائن، وفي الحالات الأخرى تُرجَع `this`. مثلًا، يعاد في المثال التالي الكائن المرفق بعد
104
-
`return` ويهمل الكائن المسنَد إلى `this`:
98
+
بمعنىً آخر، `return` مع كائن يُرجَع الكائن، وفي الحالات الأخرى تُرجَع `this`. مثلًا، يعاد في المثال التالي الكائن المرفق بعد `return` ويهمل الكائن المسنَد إلى `this`:
105
99
106
100
```
107
101
function BigUser() {
@@ -121,9 +115,8 @@ return; // ← this تُرجِع
121
115
}
122
116
alert( new SmallUser().name ); // John
123
117
```
124
-
لا تحوي الدوال البانية غالبًا على تعليمة الإعادة `return`. نذكر هنا هذا التصرف الخاص عند إرجاع الكائنات بغرض شمول
125
-
جميع النواحي.
126
-
### **حذف الاقواس**
118
+
لا تحتوي الدوال البانية غالبًا على تعليمة الإعادة `return`. نذكر هنا هذا التصرف الخاص عند إرجاع الكائنات بغرض شمول جميع النواحي.
119
+
### **حذف الأقواس**
127
120
بالمناسبة، يمكننا حذف أقواس `new` في حال غياب المعاملات مُعامِلات:
128
121
129
122
```
@@ -134,9 +127,7 @@ let user = new User();
134
127
135
128
لا يُعد حذف الأقواس أسلوبًا جيدَا، لكن الصيغة مسموح بها من خلال المواصفات.
136
129
## الدوال في الباني
137
-
استخدام الدوال البانية لإنشاء الكائنات يُعطي مرونة كبيرة. قد تحوي الدالة البانية على مُعامِلات ترشد في بناء الكائن ووضعه، إذ
138
-
يمكننا إضافة خاصيات ودوال إلى `this` بالطبع. مثلًا، تُنشِئ `new User(name)` في الأسفل كائنًا بالاسم المُعطَى `name`
139
-
والدالة `sayHi`:
130
+
استخدام الدوال البانية لإنشاء الكائنات يُعطي مرونة كبيرة. قد تحتوي الدالة البانية على مُعامِلات ترشد في بناء الكائن ووضعه، إذ يمكننا إضافة خاصيات ودوال إلى `this` بالطبع. مثلًا، تُنشِئ `new User(name)` في الأسفل كائنًا بالاسم المُعطَى `name` والدالة `sayHi`:
140
131
141
132
```
142
133
function User(name) {
@@ -159,14 +150,11 @@ sayHi: function() { ... }
159
150
لإنشاء كائنات أكثر تعقيدًا، يوجد صيغة أكثر تقدمًا، الفئات، والتي سنغطيها لاحقًا.
160
151
## الخلاصة
161
152
- الدوال البانية، أو باختصار البانيات، هي دوال عادية، لكن يوجد اتفاق متعارف عليه ببدء اسمها بحرف كبير.
162
-
- يجب استدعاء الدوال البانية باستخدام `new` فقط. يتضمن هذا الاستدعاء إنشاء كائن فارغ وإسناده إلى `this` وبدء العملية ثم
163
-
إرجاع هذا الكائن في نهاية المطاف.
164
-
يمكننا استخدام الدوال البانية لإنشاء كائنات متعددة متشابهة.
165
-
تزود JavaScript دوالًا بانية للعديد من الأنواع (الكائنات) المدمجة في اللغة: مثل النوع `Date` للتواريخ، و `Set`
166
-
للمجموعات وغيرها من الكائنات التي نخطط لدراستها.
153
+
- يجب استدعاء الدوال البانية باستخدام `new` فقط. يتضمن هذا الاستدعاء إنشاء كائن فارغ وإسناده إلى `this` وبدء العملية ثم إرجاع هذا الكائن في نهاية المطاف.
154
+
- يمكننا استخدام الدوال البانية لإنشاء كائنات متعددة متشابهة.
155
+
- تزود JavaScript دوالًا بانية للعديد من الأنواع (الكائنات) المدمجة في اللغة: مثل النوع `Date` للتواريخ، و `Set` للمجموعات وغيرها من الكائنات التي نخطط لدراستها.
167
156
### **عودة قريبة**
168
-
غطينا الأساسيات فقط عن الكائنات وبانياتها في هذا الفصل. هذه الأساسيات مهمة تمهيدًا لتعلم المزيد عن أنواع البيانات والدوال في
169
-
الفصل التالي.
157
+
غطينا الأساسيات فقط عن الكائنات وبانياتها في هذا الفصل. هذه الأساسيات مهمة تمهيدًا لتعلم المزيد عن أنواع البيانات والدوال في الفصل التالي.
170
158
بعد تعلم ذلك، سنعود للكائنات ونغطيها بعمق في فصل الخصائص، والوراثة، والأصناف.
0 commit comments