Skip to content

Commit 9fad259

Browse files
authored
Merge pull request #96 from dvmhmdsd/master
Proxy and Reflect
2 parents b3e5689 + 521c66b commit 9fad259

7 files changed

Lines changed: 345 additions & 343 deletions

File tree

1-js/08-prototypes/03-native-prototypes/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ alert(obj); // "[object Object]" ?
1717

1818
...ولكن الصيغة `obj = {}` هي نفسها هذه الصيغة `obj = new Object()`، حيث أن `Object` هو دالة بانية للكائنات موجودة بالفعل والتى تحتوى على الخاصية `prototype` التى تحتوى على مرجع لكائن ضخم يحتوى على الدالة `toString` ودوال أخري.
1919

20-
هاهنا ما يحدث:
20+
إليك ما يحدث:
2121

2222
![](object-prototype.svg)
2323

1-js/99-js-misc/01-proxy/01-error-nonexisting/task.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
# Error on reading non-existant property
1+
# خطأ عند قراءة خاصية غير موجودة
22

3-
Usually, an attempt to read a non-existant property returns `undefined`.
3+
عادة، عند محاولة قراءة خاصية غير موجودة فإنها تُرجع `undefined`.
44

5-
Create a proxy that throws an error for an attempt to read of a non-existant property instead.
5+
قم بإنشاء بروكسي يقوم بإظهار خطأ عند محاولة قراءة خاصية غير موجودة بدلًا من ذلك.
66

7-
That can help to detect programming mistakes early.
7+
هذا يساعد علي استكشاف الأخطاء البرمجية بشكل أسرع.
88

9-
Write a function `wrap(target)` that takes an object `target` and return a proxy that adds this functionality aspect.
9+
قم بإنشاء دالة `wrap(target)` والتي تستقبل كائن `target` وتقوم بإرجاع بروكسي يضيف هذه الوظيفة.
1010

11-
That's how it should work:
11+
هذا كيفية فعله:
1212

1313
```js
1414
let user = {

1-js/99-js-misc/01-proxy/02-array-negative/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ array = new Proxy(array, {
66
get(target, prop, receiver) {
77
if (prop < 0) {
88
// even if we access it like arr[1]
9-
// prop is a string, so need to convert it to number
9+
// prop هو نص ولذلك نريد أن نحوله
1010
prop = +prop + target.length;
1111
}
1212
return Reflect.get(target, prop, receiver);
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11

2-
# Accessing array[-1]
2+
# الوصول إلي array[-1]
33

4-
In some programming languages, we can access array elements using negative indexes, counted from the end.
4+
في بعض لغات البرمجة، يمكن الوصول إلي عناصر المصفوفات برقم سالب حيث تقوم بالحسبة من النهاية.
55

6-
Like this:
6+
كهذا:
77

88
```js
99
let array = [1, 2, 3];
@@ -13,11 +13,11 @@ array[-2]; // 2, one step from the end
1313
array[-3]; // 1, two steps from the end
1414
```
1515

16-
In other words, `array[-N]` is the same as `array[array.length - N]`.
16+
بطريقة أخري، فإن `array[-N]` هو نفسه `array[array.length - N]`.
1717

18-
Create a proxy to implement that behavior.
18+
قم بإنشاء بروكسي لتنفيذ هذا السلوك.
1919

20-
That's how it should work:
20+
هنا كيف يجب أن تعمل:
2121

2222
```js
2323
let array = [1, 2, 3];
@@ -29,5 +29,5 @@ array = new Proxy(array, {
2929
alert( array[-1] ); // 3
3030
alert( array[-2] ); // 2
3131

32-
// Other array functionality should be kept "as is"
32+
// السلوك الطبيعي للمصفوفات الأخري يجب أن يظل كما هو
3333
```

1-js/99-js-misc/01-proxy/03-observable/solution.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
The solution consists of two parts:
1+
يتكون الحل من جزئين:
22

3-
1. Whenever `.observe(handler)` is called, we need to remember the handler somewhere, to be able to call it later. We can store handlers right in the object, using our symbol as the property key.
4-
2. We need a proxy with `set` trap to call handlers in case of any change.
3+
1. عند استدعاء `.observe(handler)` في أى وقت، نحتاج إلي أن نتذكر الـ handler فس أي مكان، لنكون قادرين علي استدعاءه لاحقًا. يمكن تخزين الـhandler في الأوبجكت باستخدام الرمز كاسم للخاصية.
4+
2. نحتاج إلي بروكسي يحتوي علي الtrap `set` لاستدعاء الhandlers في حالة التغيير.
55

66
```js run
77
let handlers = Symbol('handlers');

1-js/99-js-misc/01-proxy/03-observable/task.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
21
# Observable
32

4-
Create a function `makeObservable(target)` that "makes the object observable" by returning a proxy.
3+
قم بإنشاء الدالة `makeObservable(target)` والتي تقوم بجعل الأوبجكت observable عن طريق إرجاع بروكسي.
54

6-
Here's how it should work:
5+
هنا كيف تعمل:
76

87
```js run
98
function makeObservable(target) {
@@ -20,8 +19,8 @@ user.observe((key, value) => {
2019
user.name = "John"; // alerts: SET name=John
2120
```
2221

23-
In other words, an object returned by `makeObservable` is just like the original one, but also has the method `observe(handler)` that sets `handler` function to be called on any property change.
22+
بعبارات أخري، الأوبجكت الذي يتم استرجاعه بواسطة `makeObservable` هو مثل الأوبجكت الأصلي ولكن يحتوي أيضًا علي الدالة `observe(handler)` والتي تنشئ `handler` يتم استدعاؤه في كل تغير لخاصية.
2423

25-
Whenever a property changes, `handler(key, value)` is called with the name and value of the property.
24+
عند تغير أي خاصية، يتم استدعاء `handler(key, value)` بإسم وقيمة الخاصية.
2625

27-
P.S. In this task, please only take care about writing to a property. Other operations can be implemented in a similar way.
26+
ملاحظه: في هذا التكليف، اهتم فقط بعملية التعديل علي الخاصية. العمليات الأخري يمكن تطبيقها بنفس الطريقة.

0 commit comments

Comments
 (0)