ÙÙ ÙÙØ¬ÙÙÙØ§Øª (تعÙÙ٠ات) Ø§ÙØ§Ø³ØªÙراد ÙØ§ÙØªØµØ¯ÙØ± Ø£ÙØ«Ø± Ù Ù ØµÙØ§ØºØ© Ø¨Ø±Ù Ø¬ÙØ© ÙØ§ØØ¯Ø©.
رأÙÙØ§ Ù٠اÙÙØµÙ Ø§ÙØ³Ø§Ø¨Ù استع٠اÙÙØ§ Ø¨Ø³ÙØ·Ùا ÙÙØ ÙÙÙÙØ§ ÙØ±Ù بÙÙØ© Ø§ÙØ§Ø³ØªØ¹Ù Ø§ÙØ§Øª.
Ø§ÙØªØµØ¯Ùر ÙØ¨Ù Ø§ÙØªØµØ±ÙØ
ÙÙ
ÙÙÙØ§ Ø£Ù ÙÙÙÙ ÙØ£ÙÙ ØªØµØ±ÙØ بأÙÙÙ Ù
ÙØµØ¯Ùر Ø¨ÙØ¶Ø¹ عبارة export ÙØ¨ÙÙØ ÙØ§Ù Ø§ÙØªØµØ±ÙØ Ø¹Ù Ù
تغÙÙØ± Ø£Ù Ø¹Ù Ø¯Ø§ÙØ© أ٠ع٠صÙÙ.
ÙÙ Ø«ÙÙØ§Ø Ø§ÙØªØµØ¯Ùرات ÙÙØ§ ÙÙÙÙØ§ صØÙØØ©:
// ØªØµØ¯ÙØ± Ù
صÙÙÙØ©
export let months = ['Jan', 'Feb', 'Mar','Apr', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
// ØªØµØ¯ÙØ± ثابت
export const MODULES_BECAME_STANDARD_YEAR = 2015;
// ØªØµØ¯ÙØ± صÙÙ
export class User {
constructor(name) {
this.name = name;
}
}
Ù
ÙØ§ØØ¸Ø©: ÙØ§ ÙÙØ¬Ø¯ ÙÙØ§ØµÙ Ù
ÙÙÙØ·Ø© بعد تعÙÙÙ
Ø© Ø§ÙØªØµØ¯Ùر ÙÙØ£ØµÙØ§Ù Ø£Ù Ø§ÙØ¯ÙاÙÙ
ÙØ§ØØ¸ أ٠تعÙÙÙ
Ø© export ÙØ¨Ù Ø§ÙØµÙÙ Ø£Ù Ø§ÙØ¯Ø§ÙØ© ÙØ§ ÙØ¬Ø¹ÙÙØ§ [ØªØ¹Ø§Ø¨ÙØ± Ø§ÙØ¯ÙاÙÙ](https://academy.hsoub.com/programming/javascript/ØªØ¹Ø§Ø¨ÙØ±-Ø§ÙØ¯ÙاÙ-ÙØ§ÙØ¯ÙØ§Ù-Ø§ÙØ³ÙÙ
ÙØ©-ÙÙ-Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت-r782/). ÙÙ٠أÙÙ ÙØµÙØ¯Ø±ÙØ§Ø ÙÙÙÙ ÙØ§ ÙØ²Ø§Ù تعرÙÙÙØ§ ÙÙØ¯Ø§ÙÙØ© Ø£Ù Ø§ÙØµÙÙ.
ÙØ§ ØªÙØµÙ Ù Ø¹Ø¸Ù Ø§ÙØ£Ø¯ÙØ© Ø§ÙØªØ¹ÙÙÙ ÙØ© Ø¨ÙØ¶Ø¹ ÙØ§ØµÙØ© Ù ÙÙÙØ·Ø© بعد تعرÙÙ Ø§ÙØ¯ÙØ§Ù ÙØ§ÙØ£ØµÙØ§Ù.
ÙÙØ°Ø§ Ø§ÙØ³Ø¨Ø¨ ÙØ§ داع٠ÙÙÙØ§ØµÙØ© اÙÙ
ÙÙÙØ·Ø© ÙÙ ÙÙØ§ÙØ© Ø§ÙØªØ¹ÙÙÙ
Ø© export class ÙØ§ÙتعÙÙÙ
Ø© export function:
export function sayHi(user) {
alert(`Hello, ${user}!`);
} // ÙØ§ØØ¸ ÙØ§ ÙÙØ¬Ø¯ ÙØ§ØµÙØ© Ù
ÙÙÙØ·Ø© ÙÙ ÙÙØ§ÙØ© Ø§ÙØªØ¹Ø±ÙÙ
Ø§ÙØªØµØ¯Ùر Ø¨Ø¹ÙØ¯Ùا Ø¹Ù Ø§ÙØªØµØ±ÙØ
ÙÙ
ا ÙÙ
ÙÙÙØ§ ÙØ¶Ø¹ عبارة export ÙÙØØ¯ÙØ§.
ÙÙØ§ ÙØµØ±ÙØ Ø£ÙÙÙØ§ Ø¹Ù Ø§ÙØ¯Ø§ÙتÙÙ ÙØ¨Ø¹Ø¯Ùا ÙÙØµØ¯ÙرÙ٠ا:
// ð say.js
function sayHi(user) {
alert(`Hello, ${user}!`);
}
function sayBye(user) {
alert(`Bye, ${user}!`);
}
export {sayHi, sayBye}; // a list of exported variables
Ø£Ù⦠ÙÙ
ÙÙÙØ§ تÙÙÙÙØ§ ÙØ¶Ø¹ export أعÙÙ Ø§ÙØ¯ÙØ§Ù Ø£ÙØ¶Ùا.
عبارة Ø§Ø³ØªÙØ±Ø§Ø¯ ÙÙÙ Ø´ÙØ¡
Ø¹Ø§Ø¯Ø©Ù ÙØ¶Ø¹ ÙØ§Ø¦Ù
Ø© بÙ
ا ÙØ±Ùد Ø§Ø³ØªÙØ±Ø§Ø¯Ù Ù٠أÙÙØ§Ø³ Ù
عÙÙÙØ© import {...}âØ ÙÙØ°Ø§:
// ð main.js
import {sayHi, sayBye} from './say.js';
sayHi('John'); // Hello, John!
sayBye('John'); // Bye, John!
ÙÙÙÙ ÙÙ Ø£Ø±Ø¯ÙØ§ Ø§Ø³ØªÙØ±Ø§Ø¯ ÙØØ¯Ø§Øª ÙØ«ÙØ±Ø©Ø ÙÙÙ
ÙÙÙØ§ Ø§Ø³ØªÙØ±Ø§Ø¯ ÙÙÙ Ø´ÙØ¡ ÙØ§Ø¦ÙÙØ§ ÙØ§ØØ¯Ùا باستعÙ
ا٠import * as <obj>â ÙÙØ°Ø§:
// ð main.js
import * as say from './say.js';
say.sayHi('John');
say.sayBye('John');
ÙÙÙ٠اÙ٠رء ٠٠اÙÙØ¸Ø±Ø© Ø§ÙØ£ÙÙÙ âØ§Ø³ØªÙØ±Ø§Ø¯ ÙÙÙ Ø´ÙØ¡ ÙÙØ±Ø© ج٠ÙÙØ© Ø¬Ø¯ÙØ§Ø ÙÙØªØ§Ø¨Ø© Ø§ÙØ´ÙÙØ±Ø© سÙÙÙ٠أسرع. Ø£Ø³Ø§Ø³ÙØ§ ÙÙ Ù ÙÙÙÙ Ø¬ÙØ§Ø±Ø©Ù ٠ا ÙØ±Ùد Ø§Ø³ØªÙØ±Ø§Ø¯ÙØâ
ذÙÙâ¦ ÙØ£Ø³Ø¨Ø§Ø¨ ÙØ¬ÙÙØ©.
-
Ø£Ø¯ÙØ§Øª Ø§ÙØ¨Ùاء Ø§ÙØØ¯ÙØ«Ø© (Ù Ø«Ù: webpack ÙØºÙØ±ÙØ§)
ÙÙÙÙ Ù Ø«ÙÙØ§ بأÙÙØ§ أضÙÙØ§ Ù ÙØªØ¨Ø© Ø®Ø§Ø±Ø¬ÙØ© Ø§Ø³Ù ÙØ§
say.jsØ¥ÙÙ Ù Ø´Ø±ÙØ¹ÙØ§Ø ÙÙÙÙØ§ Ø¯ÙØ§ÙÙ Ø¹Ø¯ÙØ¯Ø©:// ð say.js export function sayHi() { ... } export function sayBye() { ... } export function becomeSilent() { ... }ÙÙØ°Ø§ ÙØ³ØªØ¹Ù Ù ÙØ§ØØ¯Ø© ÙÙØ· Ù Ù Ø¯ÙØ§ÙÙ
say.jsÙÙ Ù Ø´Ø±ÙØ¹Ùا:// ð main.js import {sayHi} from './say.js';â¦ØÙÙÙØ§ تأت٠أداة Ø§ÙØªØØ³ÙÙ ÙØªØ±Ù ذÙÙØ ÙØªÙزÙÙ Ø§ÙØ¯ÙØ§Ù Ø§ÙØ£Ø®Ø±Ù Ù Ù Ø§ÙØ´ÙÙØ±Ø© ⦠بذÙÙ ÙØµØºÙر ØØ¬Ù اÙÙ Ù٠اÙ٠بÙÙ. ÙØ°Ø§ ٠ا ÙØ³Ù ÙÙ ÙØ² Ø§ÙØ´Ø¬Ø± (ÙØªÙØ³ÙØ·Ù Ø§ÙØ£Ùرا٠اÙÙØ§Ø¨Ø³Ø©).
-
ÙÙ ÙØ¶ÙØÙا Ø¨Ø§ÙØ¶Ø¨Ø· ٠ا ÙØ±Ùد Ø§Ø³ØªÙØ±Ø§Ø¯Ù ÙÙÙ ÙÙÙØ§ ÙØªØ§Ø¨ØªÙ Ø¨Ø§Ø³Ù Ø£ÙØµØ±:
sayHi()âØ¨Ø¯Ùsay.sayHi()â. -
Ø¨ÙØªØ§Ø¨Ø© ÙØ§Ø¦Ù Ø© Ø§ÙØ§Ø³ØªÙراد Ø¬ÙØ§Ø±Ø©Ù ÙØ³ØªØ·Ùع Ø£Ù ÙÙÙ٠بÙÙØ© Ø§ÙØ´ÙÙØ±Ø© دÙÙ Ø§ÙØ®Ùض ÙÙ Ø§ÙØªÙاصÙÙ (Ø£Ù ÙØ¹Ø±Ù ٠ا ÙØ³ØªØ¹Ù Ù Ù Ù ÙØØ¯Ø§ØªØ ÙØ£ÙÙ ÙØ³ØªØ¹Ù ÙÙØ§). ÙØ°Ø§ ÙØ³ÙÙÙ Ø¯Ø¹Ù Ø§ÙØ´ÙÙØ±Ø© ÙØ¥Ø¹Ø§Ø¯Ø© ÙØªØ§Ø¨ØªÙا Ù٠تطÙÙØ¨ Ø§ÙØ£Ù ر.
Ø§Ø³ØªÙØ±Ø§Ø¯ ÙØ°Ø§ Ø¨Ø§ÙØ§Ø³Ù
ÙØ°Ø§ as
ÙÙ
ÙÙÙØ§ ÙØ°Ù٠استعÙ
ا٠as ÙØ§Ø³ØªÙراد Ù
ا ÙØ±Ùد بأسÙ
اء Ù
ختÙÙØ©.
ÙÙ
Ø«ÙÙØ§ ÙÙ
ÙÙÙØ§ Ø§Ø³ØªÙØ±Ø§Ø¯ Ø§ÙØ¯Ø§ÙØ© sayHi Ù٠اÙÙ
ØªØºÙØ± اÙÙ
ØÙÙ hi ÙÙØ®ØªØµØ± اÙÙÙØ§Ù
Ø ÙØ§Ø³ØªÙراد sayBye عÙ٠أÙÙÙØ§ bye:
// ð main.js
import {sayHi as hi, sayBye as bye} from './say.js';
hi('John'); // Hello, John!
bye('John'); // Bye, John!
ØªØµØ¯ÙØ± ÙØ°Ø§ Ø¨Ø§ÙØ§Ø³Ù
ÙØ°Ø§ as
ÙÙØ³ ØµÙØ§ØºØ© Ø§ÙØ§Ø³ØªÙراد Ù
ÙØ¬Ùدة Ø£ÙØ¶Ùا ÙÙØªØµØ¯Ùر export.
ÙÙÙØµØ¯Ùر Ø§ÙØ¯Ùا٠عÙ٠أÙÙÙØ§ hi Ùbye:
// ð say.js
...
export {sayHi as hi, sayBye as bye};
Ø§ÙØ¢Ù صارت hi Ùbye ÙÙ Ø§ÙØ£Ø³Ù
اء âØ§ÙØ±Ø³Ù
ÙØ©â ÙÙØ´ÙÙØ±Ø§Øª Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ÙØ³ØªÙستعÙ
Ù Ø¹ÙØ¯ Ø§ÙØ§Ø³ØªÙراد:
// ð main.js
import * as say from './say.js';
// ÙØ§ØÙظ اÙÙØ±Ù
say.hi('John'); // Hello, John!
say.bye('John'); // Bye, John!
Ø§ÙØªØµØ¯Ùر اÙ٠بدئÙ
Ù٠اÙÙØ§Ùع Ø§ÙØ¹Ù ÙÙØ Ø«Ù ÙØ© ÙÙØ¹ÙÙ Ø±Ø¦ÙØ³Ù٠٠٠اÙÙØØ¯Ø§Øª.
- تÙÙ Ø§ÙØªÙ ØªØØªÙÙ Ù
ÙØªØ¨Ø© (Ø£Ù Ù
جÙ
ÙØ¹Ø© Ù
Ù Ø§ÙØ¯ÙاÙ) Ù
Ø«Ù ÙØØ¯Ø©
say.jsØ£Ø¹ÙØ§Ù. - ÙØªÙÙ Ø§ÙØªÙ ØªØµØ±ÙØ ع٠ÙÙØ§ÙÙ ÙØ§ØØ¯ Ù
Ø«Ù ÙØØ¯Ø©
user.jsØ§ÙØªÙ ØªÙØµØ¯Ùرclass UserÙÙØ·.
عادة٠٠ا ÙÙØØ¨ÙØ° Ø§Ø³ØªØ¹Ù Ø§Ù Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØ«Ø§ÙÙØ© ÙÙ ÙÙÙÙ ÙÙÙÙ âØ´ÙØ¡â ÙØØ¯Ø©Ù Ø®Ø§ØµØ© بÙ.
ÙÙÙÙ ÙØ°Ø§ Ø¨Ø·Ø¨ÙØ¹Ø© Ø§ÙØØ§Ù ÙØ·Ùب Ù ÙÙØ§Øª ÙØ«Ùرة إذ ÙØ·Ùب ÙÙÙ Ø´ÙØ¡ ÙØØ¯Ø©Ù ØªØ®ØµÙÙ Ø¨Ø§Ø³Ù ÙØ ÙÙÙÙÙ ÙØ°Ù ÙÙØ³Øª ب٠شÙÙØ©Ø Ø£Ø¨Ø¯ÙØ§. ب٠عÙÙ Ø§ÙØ¹Ùس ÙÙØ°Ø§ ÙØµÙر Ø§ÙØªÙÙÙ ÙÙ Ø§ÙØ´ÙÙØ±Ø© أسÙÙ (ÙÙ ÙØ§Ùت ØªØ³Ù ÙØ© اÙÙ ÙÙØ§Øª Ù Ø±Ø¶ÙØ© ÙÙ Ø±ØªÙØ¨Ø© ÙÙ Ù Ø¬ÙØ¯Ø§Øª).
تÙÙØ± اÙÙÙØØ¯Ø§Øª طرÙÙØ© ÙØµÙاغة عبارة export default (Ø§ÙØªØµØ¯Ùر اÙÙ
بدئÙ) ÙØ¬Ø¹Ù âØ³Ø·Ø± ØªØµØ¯ÙØ± ÙØ§ØØ¯ ÙÙÙÙ ÙÙØØ¯Ø©â ØªØ¨Ø¯Ù Ø£ÙØ¶Ù.
Ø¶ÙØ¹ export default ÙØ¨Ù Ø£ÙÙ ÙÙØ§Ù ÙØªØµØ¯ÙرÙ:
// ð user.js
export default class User { // â«ÙÙØ¶ÙÙ âdefaultâ ÙÙØ·
constructor(name) {
this.name = name;
}
}
ÙÙÙÙ Ù
Ù٠سطر ØªØµØ¯ÙØ± export default ÙØ§ØØ¯ ÙØ§ Ø£ÙØ«Ø±.
ÙØ¨Ø¹Ø¯ÙØ§â¦ ÙØ³ØªÙرد اÙÙÙØ§Ù بدÙÙ Ø§ÙØ£ÙÙØ§Ø³ اÙ٠عÙÙÙØ©:
// ð main.js
import User from './user.js'; // â«Ùا ÙØ¶Ø¹ {User}Ø Ø¨Ù User
new User('John');
أسطر Ø§ÙØ§Ø³ØªÙراد Ø§ÙØªÙ ÙØ§ ØªØØªÙÙ Ø§ÙØ£ÙÙØ§Ø³ اÙÙ
عÙÙÙØ© أجÙ
Ù Ù
٠تÙÙ Ø§ÙØªÙ ØªØØªÙÙÙØ§. ÙØ´Ùع خطأ ÙØ³Ùا٠تÙÙ Ø§ÙØ£ÙÙØ§Ø³ ØÙÙ ÙØ¨Ø¯Ø£ اÙÙ
Ø·ÙØ±Ù٠باستعÙ
ا٠اÙÙÙØØ¯Ø§Øª. ÙØ°Ø§ تذÙÙØ± دائÙ
ÙØ§Ø ÙØ·Ùب سطر Ø§ÙØ§Ø³ØªÙراد import Ø£ÙÙØ§Ø³ Ù
عÙÙÙØ© ÙÙÙÙØ§Ùات اÙÙ
ÙØµØ¯Ùرة ÙØ§Ùت٠ÙÙØ§ أسÙ
Ø§Ø¡Ø ÙÙØ§ ÙØ·ÙØ¨ÙØ§ ÙØªÙ٠اÙÙ
Ø¨Ø¯Ø¦ÙØ©.
| Ø§ÙØªØµØ¯Ùر Ø§ÙØ°Ù Ù٠اس٠| Ø§ÙØªØµØ¯Ùر اÙ٠بدئ٠|
|---|---|
export class User {...} |
export default class User {...}â |
import {User} from ... |
import User from ... |
ÙÙ ÙÙÙØ§ ÙØ¸Ø±ÙÙØ§ ÙØ¶Ø¹ اÙÙÙØ¹ÙÙ Ù Ù Ø§ÙØªØµØ¯Ùر Ù Ø¹ÙØ§ ÙÙ ÙÙØ³ اÙÙØØ¯Ø© (Ø§ÙØ°Ù ÙÙ Ø§Ø³Ù ÙØ§Ù٠بدئÙ)Ø ÙÙÙ٠ع٠ÙÙÙØ§ ÙØ§ ÙØ®ÙØ· اÙÙØ§Ø³ عادة٠بÙÙÙØ§Ø ب٠ÙÙÙÙØØ¯Ø© Ø¥Ù ÙØ§ ØªØµØ¯ÙØ±Ø§Øª ÙÙØ§ Ø£Ø³Ù Ø§Ø¡Ø Ø£Ù Ø§ÙØªØµØ¯Ùر اÙ٠بدئÙ.
ÙÙØ£ÙÙÙ ÙØ§ ÙÙ Ù٠أ٠ÙÙÙÙ ÙÙÙÙ Ù ÙÙ Ø¥ÙØ§ ØªØµØ¯ÙØ±Ùا ٠بدئÙÙØ§ ÙØ§ØØ¯ÙØ§Ø ÙÙÙ ÙÙ ÙÙÙÙØ§Ù Ø§ÙØ°Ù ØµÙØ¯Ùر Ø£ÙÙØ§ ÙØÙ Ù Ø£Ù٠اس٠.
ÙÙ Ø«ÙÙØ§ Ø§ÙØªØµØ¯Ùرات أسÙÙÙ ÙÙÙÙØ§ صØÙØØ© ٠ئة Ù٠اÙ٠ئة:
export default class { // ÙØ§ اسÙ
ÙÙØµÙÙ
constructor() { ... }
}
export default function(user) { // ÙØ§ اسÙ
ÙÙØ¯Ø§ÙØ©
alert(`Hello, ${user}!`);
}
// ÙÙØµØ¯Ùر ÙÙÙ
Ø©Ù ÙØ§ØØ¯Ø© دÙÙ ØµÙØ¹ Ù
تغÙÙØ±
export default ['Jan', 'Feb', 'Mar','Apr', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
ÙØ§ Ù
Ø´ÙÙØ© Ø¨ØªØ§ØªÙØ§ بعدÙ
ÙØªØ§Ø¨Ø© Ø§ÙØ§Ø³Ù
إذ ÙØ§ ÙØ±Ù export default Ø¥ÙÙØ§ Ù
Ø±ÙØ© Ù٠اÙÙ
ÙÙØ Ø¨ÙØ°Ø§ تعر٠تÙ
اÙ
ÙØ§ أسطر import (بدÙ٠استعÙ
Ø§Ù Ø§ÙØ£ÙÙØ§Ø³ اÙÙ
عÙÙÙØ©) Ù
ا عÙÙÙØ§ Ø§Ø³ØªÙØ±Ø§Ø¯Ù.
ÙÙÙ٠دÙÙ default ÙÙØ°Ø§ Ø§ÙØªØµØ¯Ùر سÙÙØ¹Ø·ÙÙØ§ خطأÙ:
export class { // Error! (non-default export needs a name)
constructor() {}
}
Ø§ÙØ§Ø³Ù اÙ٠بدئÙ
ØªÙØ³ØªØ¹Ù
Ù ÙÙ ØØ§Ùات Ù
عÙÙÙØ© اÙÙÙÙ
Ø© اÙÙ
ÙØªØ§ØÙØ© default ÙÙØ¥Ø´Ø§Ø±Ø© Ø¥ÙÙ Ø§ÙØªØµØ¯Ùر اÙÙ
بدئÙ.
ÙÙ Ø«ÙÙØ§ ÙØªØµØ¯Ùر Ø§ÙØ¯Ø§ÙØ© Ø¨ÙØÙÙ Ù ÙÙØµÙ ع٠تعرÙÙÙØ§:
function sayHi(user) {
alert(`Hello, ${user}!`);
}
// â«ÙÙ
ا Ù٠أضÙÙØ§ âexport defaultâ ÙØ¨Ù Ø§ÙØ¯Ø§ÙØ©
export {sayHi as default};
Ø£Ù ÙÙÙ٠بأÙ٠اÙÙØØ¯Ø© user.js ØªÙØµØ¯Ùر Ø´ÙØ¦Ùا ÙØ§ØØ¯Ùا âÙ
بدئÙÙØ§â ÙØ£Ø®Ø±Ù ÙÙØ§ أسÙ
اء (ÙØ§Ø¯Ø±Ùا Ù
ا ÙØØ¯Ø«Ø ÙÙÙÙÙÙ ÙØØ¯Ø«):
// ð user.js
export default class User {
constructor(name) {
this.name = name;
}
}
export function sayHi(user) {
alert(`Hello, ${user}!`);
}
ÙÙØ°Ø§ ÙØ³ØªÙرد Ø§ÙØªØµØ¯Ùر اÙ٠بدئ٠٠ع ذÙÙ Ø§ÙØ°Ù ÙØ¯Ù٠اس٠:
// ð main.js
import {default as User, sayHi} from './user.js';
new User('John');
ÙØ£Ø®ÙØ±ÙØ§Ø ØÙÙ ÙØ³ØªÙرد ÙÙÙ Ø´ÙØ¡ * عÙ٠أÙÙÙ ÙØ§Ø¦ÙØ ÙØ³ØªÙÙÙ Ø®Ø§ØµÙØ© default ÙÙ ÙÙ
ا Ø§ÙØªØµØ¯Ùر اÙÙ
بدئÙ:
// ð main.js
import * as user from './user.js';
let User = user.default; // the default export
new User('John');
ÙÙ٠تÙÙ Ø¨Ø®ØµÙØµ Ø³ÙØ¡ Ø§ÙØªØµØ¯Ùرات اÙÙ Ø¨Ø¯Ø¦ÙØ©
Ø§ÙØªØµØ¯Ùرات Ø§ÙØªÙ ÙÙØ§ أس٠اء تÙÙÙ ØµØ±ÙØØ©Ø Ø£Ù Ø£ÙÙÙØ§ تÙÙÙ ØªÙ Ø§Ù ÙØ§ ٠ا اÙÙØ°Ù ÙØ¬Ø¨ Ø£Ù ÙØ³ØªÙØ±Ø¯ÙØ ÙØ¨Ø°ÙÙ ÙÙÙÙ ÙØ¯ÙÙØ§ ÙØ°Ù اÙ٠عÙÙ٠ات Ù ÙÙÙ Ø ÙÙØ°Ø§ Ø´ÙØ¡ Ø¬ÙØ¯.
ØªÙØ¬Ø¨Ø±Ùا Ø§ÙØªØµØ¯Ùرات Ø§ÙØªÙ ÙÙØ§ أس٠اء Ø¨Ø§Ø³ØªØ¹Ù Ø§Ù Ø§ÙØ§Ø³Ù Ø§ÙØµØÙØ Ù٠ا ÙÙ Ø¨Ø§ÙØ¶Ø¨Ø· ÙØ§Ø³ØªÙراد اÙÙØØ¯Ø©:
import {User} from './user.js';
// â«ÙÙ٠تعÙ
Ù import {MyUser}â Ø¥Ø° ÙØ¬Ø¨ Ø£Ù ÙÙÙÙ Ø§ÙØ§Ø³Ù
{User}
بÙÙ٠ا ÙÙ ØØ§ÙØ© Ø§ÙØªØµØ¯Ùر اÙÙ Ø¨Ø¯Ø¦Ù ÙØ®ØªØ§Ø± ÙØÙ Ø§ÙØ§Ø³Ù ØÙÙ ÙØ³ØªÙرد اÙÙÙØØ¯Ø©:
import User from './user.js'; // works
import MyUser from './user.js'; // works too
// â«ÙÙÙ
ÙÙ Ø£ÙØ¶Ùا أ٠تÙÙÙ âØ§Ø³ØªÙØ±Ùد ÙÙ Ø´ÙØ¡â import Anything... ÙØ³ØªØ¹Ù
Ù Ø¨ÙØ§ أدÙÙ Ù
Ø´ÙÙØ©
ÙØ°Ø§ ÙØ¯ ÙØ¤Ø¯Ù٠إÙÙ Ø£Ù ÙØ³ØªØ¹Ù ٠أعضاء اÙÙØ±Ù٠أس٠اء ٠ختÙÙØ© ÙØ§Ø³ØªÙراد Ø§ÙØ´ÙØ¡ Ø°Ø§ØªÙØ ÙÙØ°Ø§ Ø·Ø¨Ø¹ÙØ§ ÙÙØ³ Ø¨Ø§ÙØ¬Ùد.
عادة٠ÙÙÙØªØ¬ÙÙØ¨ ذÙÙ ÙÙÙØØ§ÙØ¸ عÙÙ Ø§ØªØ³Ø§Ù Ø§ÙØ´ÙÙØ±Ø©Ø ÙØ³ØªØ¹Ù ٠اÙÙØ§Ø¹Ø¯Ø© اÙÙØ§Ø¦ÙØ© بأÙ٠أس٠اء اÙÙ ØªØºÙØ±Ø§Øª اÙÙ ÙØ³ØªÙØ±ÙØ¯Ø© ÙØ¬Ø¨ أ٠تÙÙØ§Ù٠أس٠اء اÙÙ ÙÙØ§ØªØ ÙÙØ°Ø§ Ù Ø«ÙÙØ§:
import User from './user.js';
import LoginForm from './loginForm.js';
import func from '/path/to/func.js';
...
Ù
ع ذÙÙ ØªÙØ¸Ùر بعض اÙÙÙØ±Ù ÙÙØ°Ø§ Ø§ÙØ£Ù
ر عÙ٠أÙÙ Ø¹ÙØ¨Ø© ÙÙØªØµØ¯Ùرات اÙÙ
Ø¨Ø¯Ø¦ÙØ© ÙØªÙضÙ٠استعÙ
Ø§Ù Ø§ÙØªØµØ¯Ùرات Ø§ÙØªÙ ÙÙØ§ اسÙ
دÙÙ
ÙØ§. ÙØØªÙÙ ÙÙ ÙØ§Ùت ÙØµØ¯Ùر Ø´ÙØ¦Ùا ÙØ§ØØ¯Ùا ÙÙØ· ÙÙ
ا Ø²Ø§ÙØª ØªÙØµØ¯Ùر٠باسÙ
دÙ٠استعÙ
ا٠default.
Ù٠ا ÙØ³ÙÙÙ ÙØ°Ø§ إعادة Ø§ÙØªØµØ¯Ùر (طاÙÙØ¹ أسÙÙÙ).
إعادة Ø§ÙØªØµØ¯Ùر
ØªÙØªÙØ ÙÙØ§ ØµÙØ§ØºØ© âØ¥Ø¹Ø§Ø¯Ø© Ø§ÙØªØµØ¯Ùرâ export ... from ...â Ø§Ø³ØªÙراد Ø§ÙØ£Ø´Ùاء ÙØªØµØ¯ÙØ±ÙØ§ Ù
باشرة٠(ربÙ
ا باسÙ
آخر) ÙÙØ°Ø§:
export {sayHi} from './say.js'; // â«ÙÙØ¹Ùد ØªØµØ¯ÙØ± sayHi
export {default as User} from './user.js'; // ÙÙØ¹Ùد ØªØµØ¯ÙØ± اÙÙ
بدئÙ
ÙÙÙÙ ÙÙÙ Ù ÙØ³ØªØ¹Ù Ù ÙØ°Ø§ أصÙÙØ§Ø ÙÙØ±Ù ٠ثاÙÙØ§ ع٠ÙÙÙØ§.
Imagine, weâre writing a âpackageâ: a folder with a lot of modules, with some of the functionality exported outside (tools like NPM allow us to publish and distribute such packages, but we donât have to use them), and many modules are just âhelpersâ, for internal use in other package modules.
ÙÙ Ù٠أ٠تÙÙ٠بÙÙØ© اÙÙ ÙÙØ§Øª ÙÙØ°Ø§:
auth/
index.js
user.js
helpers.js
tests/
login.js
providers/
github.js
facebook.js
...
Weâd like to expose the package functionality via a single entry point.
In other words, a person who would like to use our package, should import only from the âmain fileâ auth/index.js.
Like this:
import {login, logout} from 'auth/index.js'
The âmain fileâ, auth/index.js exports all the functionality that weâd like to provide in our package.
The idea is that outsiders, other programmers who use our package, should not meddle with its internal structure, search for files inside our package folder. We export only whatâs necessary in auth/index.js and keep the rest hidden from prying eyes.
ÙØ¸Ø±Ùا ÙÙÙ٠اÙÙØ¸ÙÙØ© اÙÙØ¹ÙÙØ© اÙÙ
ØµØ¯ÙØ±Ø© Ù
بعثرة بÙÙ Ø§ÙØØ²Ù
Ø©Ø ÙÙ
ÙÙÙØ§ Ø§Ø³ØªÙØ±Ø§Ø¯Ùا Ø¥ÙÙ auth/index.js ÙØªØµØ¯ÙØ±ÙØ§ Ù
Ù ÙÙØ§ÙÙ Ø£ÙØ¶Ùا:
// ð auth/index.js
// â«Ø§ÙØ³ØªÙØ±Ø¯ login/logout ÙØµØ¯ÙرÙÙ Ù
باشرةÙ
import {login, logout} from './helpers.js';
export {login, logout};
// â«Ø§Ø³ØªÙرد اÙÙ
Ù٠اÙÙ
بدئ٠ÙÙ User ÙØµØ¯Ø±Ù Ù
Ù Ø¬Ø¯ÙØ¯
import User from './user.js';
export {User};
...
ÙØ§ÙØ¢Ù ÙÙ
ÙÙ ÙÙ
ستخدÙ
Ù Ø§ÙØØ²Ù
Ø© Ø§ÙØ®Ø§ØµØ© Ø¨ÙØ§ Ø§Ø³ØªÙØ±Ø§Ø¯Ùا ÙÙØ°Ø§ import {login} from "auth/index.js"â.
Ø¥Ù Ø§ÙØµÙاغة export ... from ...â Ù
اÙÙ Ø¥ÙØ§ اختصار ÙÙØ§Ø³ØªÙراد ÙØ§ÙØªØµØ¯ÙØ±:
// ð auth/index.js
// re-export login/logout
export {login, logout} from './helpers.js';
// re-export the default export as User
export {default as User} from './user.js';
...
The notable difference of export ... from compared to import/export is that re-exported modules arenât available in the current file. So inside the above example of auth/index.js we canât use re-exported login/logout functions.
Re-exporting the default export
ÙØØªØ§Ø¬ Ø§ÙØªØµØ¯Ùر اÙ٠بدئ٠ÙÙ Ø¹Ø§ÙØ¬Ø© Ù ÙÙØµÙØ© Ø¹ÙØ¯ إعادة Ø§ÙØªØµØ¯Ùر.
Letâs say we have user.js with the export default class User and would like to re-export it:
// ð user.js
export default class User {
// ...
}
- Ù٠تعÙ
Ù Ø§ÙØªØ¹ÙÙÙ
Ø©
export User from './user.js'â. ٠ا Ø§ÙØ®Ø·Ø£ Ø§ÙØ°Ù ØØ¯Ø«Ø ÙÙÙÙ ÙØ°Ø§ Ø§ÙØ®Ø·Ø£ ÙÙ ØµÙØ§ØºØ©!
We can come across two problems with it:
-
export User from './user.js'wonât work. That would lead to a syntax error. -
ØªØ¹ÙØ¯ Ø§ÙØªØ¹ÙÙÙ Ø©
export * from './user.js'âØªØµØ¯ÙØ± Ø§ÙØªØµØ¯Ùرات اÙÙØªÙ ÙÙØ§ أس٠اء ÙÙØ·Ø ÙÙÙÙÙØ§ تتجاÙÙ Ø§ÙØªØµØ¯Ùرات اÙÙ Ø¨Ø¯Ø¦ÙØ©.إذا Ø±ØºØ¨ÙØ§ Ù٠إعادة ØªØµØ¯ÙØ± Ø§ÙØªØµØ¯Ùرات اÙÙ Ø¨Ø¯Ø¦ÙØ© ÙØ§Ùت٠ÙÙØ§ أس٠اء Ø£ÙØ¶ÙØ§Ø ÙØ³ÙØØªØ§Ø¬ Ø¥ÙÙ Ø§ÙØ¹Ø¨Ø§Ø±ØªÙÙ:
export * from './user.js'; // ÙØ¥Ø¹Ø§Ø¯Ø© ØªØµØ¯ÙØ± Ø§ÙØªØµØ¯Ùرات اÙÙØªÙ ÙÙØ§ أس٠اء export {default} from './user.js'; // ÙØ¥Ø¹Ø§Ø¯Ø© ØªØµØ¯ÙØ± Ø§ÙØªØµØ¯Ùرات اÙÙ Ø¨Ø¯Ø¦ÙØ©
Such oddities of re-exporting a default export are one of the reasons why some developers donât like default exports and prefer named ones.
Ø®ÙØ§ØµØ©
ÙØ§ÙØ¢Ù Ø³ÙØ±Ø§Ø¬Ø¹ جÙ
ÙØ¹ Ø£ÙÙØ§Ø¹ Ø·Ø±Ù Ø§ÙØªØµØ¯Ùر export Ø§ÙØªÙ ØªØØ¯Ø«Ùا عÙÙØ§ ÙÙ ÙØ°Ø§ اÙÙØµÙ ÙØ§ÙÙØµÙÙ Ø§ÙØ³Ø§Ø¨ÙØ©.
تØÙ٠٠٠٠عÙÙÙ Ø§ØªÙ Ø¨ÙØ±Ø§Ø¡ØªÙ ÙÙÙ ÙØªØ°Ùر ٠ا تعÙÙÙ ÙÙÙÙ ÙØ§ØØ¯Ø©Ù Ù ÙÙÙ :
- ÙØ¨Ù Ø§ÙØªØ¹Ø±Ù٠ع٠صÙÙ / داÙÙØ© / â¦:
export [default] class/function/variable ...â
- ØªØµØ¯ÙØ± Ù
ستÙÙ:
export {x [as y], ...}â.
- إعادة Ø§ÙØªØµØ¯Ùر:
export {x [as y], ...} from "module"âexport * from "module"â(ÙØ§ ÙÙØ¹Ùد Ø§ÙØªØµØ¯Ùر اÙ٠بدئÙ).export {default [as y]} from "module"â(ÙØ¹Ùد Ø§ÙØªØµØ¯Ùر اÙ٠بدئÙ).
Ø§Ø³ØªÙØ±Ø§Ø¯:
- Importing named exports:
import {x [as y], ...} from "module"
- Importing the default export:
import x from "module"import {default as x} from "module"
- Import all:
import * as obj from "module"
- Import the module (its code runs), but do not assign any of its exports to variables:
import "module"
ÙØ§ ÙÙÙ
Ù
ÙØ§Ù ÙØ¶Ø¹ عبارات (تعÙÙÙ
ات) import/export Ø³ÙØ§Ø¡Ù Ù٠أعÙ٠أ٠أسÙÙ Ø§ÙØ³Ùربت ÙÙÙ ÙØºÙر ذÙÙ Ø£Ù Ø´ÙØ¡.
ÙØ°Ø§ تÙÙÙÙØ§ تعدÙÙ ÙØ°Ù Ø§ÙØ´ÙÙØ±Ø© Ø§ÙØ¨Ø±Ù Ø¬ÙØ© ÙØ§ بأس Ø¨ÙØ§:
sayHi();
// ...
import {sayHi} from './say.js'; // Ø§ÙØ³ØªÙرد ÙÙ ÙÙØ§ÙØ© اÙÙ
ÙÙ
ع٠ÙÙÙØ§ عادة ٠ا تÙÙ٠تعÙÙ٠ات Ø§ÙØ§Ø³ØªÙراد ÙÙ Ø¨Ø¯Ø§ÙØ© اÙÙ ÙÙ ÙÙØ· ÙØªÙسÙÙ Ø£ÙØ¶Ù ÙÙØ´ÙÙØ±Ø©.
ÙØ§ØØ¸ أ٠تعÙÙ٠ت٠import/export ÙÙ ÙØ¹Ù ÙØ§ Ø¥Ù ÙØ§Ùا ÙÙ Ø¯Ø§Ø®Ù Ø¬Ù ÙØ© Ø´Ø±Ø·ÙØ©.
ÙÙ ÙØ¹Ù Ù Ø§ÙØ§Ø³ØªÙراد Ø§ÙØ´Ø±Ø·Ù Ù Ø«Ù ÙØ°Ø§ اÙ٠ثاÙ:
if (something) {
import {sayHi} from "./say.js"; // Error: import must be at top level
}
⦠ÙÙÙ٠٠اذا ÙÙ Ø§ØØªØ¬Ùا ØÙÙØ§ ÙØ§Ø³ØªÙراد Ø´ÙØ¡ ٠ا Ø¨Ø´Ø±ÙØ· ٠عÙÙØ©Ø Ø£Ù ÙÙ ÙÙØªÙ Ù Ø§Ø Ù Ø«Ù: تØÙ Ù٠اÙÙÙØØ¯Ø© Ø¹ÙØ¯ Ø§ÙØ·ÙØ¨Ø Ø¹ÙØ¯Ù ا تÙÙÙ ÙÙØ§Ù ØØ§Ø¬Ø© Ø¥ÙÙÙØ§ ØÙÙØ§Ø
Ø³ÙØ±Ù Ø§ÙØ§Ø³ØªÙراد Ø§ÙØ¯ÙÙØ§Ù ÙÙÙ Ù٠اÙÙ ÙØ§ÙØ© Ø§ÙØªØ§ÙÙØ©.
ترج٠ة -ÙØ¨ØªØµØ±Ù- ÙÙÙØµÙ Export and Import Ù Ù ÙØªØ§Ø¨ The JavaScript language
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)