في جافا سكريبت ، هناك عدة طرق لتغيير سياق تنفيذ الوظيفة. إحدى هذه الطرق هي طرق الربط والاستدعاء والتطبيق. يعد فهم الاختلافات بينهما جانبا مهما للمطور ، مما يساعد على استخدام هذه الأساليب في مشاريعهم بشكل أكثر فعالية ومرونة.
يتم استخدام طريقة الربط لإنشاء وظيفة جديدة مع سياق تنفيذ مرتبط. لا يستدعي الوظيفة على الفور ، ولكنه يعيد وظيفة جديدة ، عند الاتصال بها ، ستستخدم السياق الذي تم تمريره. يسمح لك الربط أيضا بتمرير الوسائط التي سيتم إصلاحها للوظيفة الجديدة.
تسمح لك طرق الاتصال والتطبيق باستدعاء وظيفة ذات سياق محدد. يسمون الوظيفة على الفور دون إنشاء وظيفة جديدة. الفرق بينهما هو كيف يقبلون الحجج. تقبل طريقة الاستدعاء قائمة بالوسيطات التي تم تمريرها إلى الوظيفة واحدة تلو الأخرى. بينما تقبل طريقة التطبيق الوسائط في شكل مصفوفة أو مصفوفة زائفة.
سيسمح لك فهم الاختلافات بين الربط والاتصال والتطبيق باستخدام هذه الأساليب بشكل أكثر مرونة وفعالية في مشاريعك. ستكون قادرا على التحكم بشكل أفضل في سياق تنفيذ الوظيفة وتبسيط الكود ، مما يجعله أكثر وضوحا وقابلية للقراءة.
- الاختلافات بين الربط والاتصال والتطبيق في جافا سكريبت
- مبادئ التشغيل
- باستخدام ربط
- باستخدام مكالمة
- باستخدام تطبيق
- الاختلافات في نقل الحجج
- أمثلة الاستخدام
- الاستنتاجات
- سؤال وجواب
- ما هي الاختلافات بين ربط, استدعاء وتطبيق الأساليب في جافا سكريبت?
- متى يجب استخدام طريقة ربط?
- كيف تعمل طريقة الاتصال?
- كيف تعمل طريقة التطبيق?
الاختلافات بين الربط والاتصال والتطبيق في جافا سكريبت
ربط هو الأسلوب الذي يسمح لك "دبوس" قيمة محددة لهذه الكلمة عند استدعاء وظيفة. أنه يخلق وظيفة جديدة من شأنها أن تسمى مع قيمة ملزمة من هذا. لا تستدعي طريقة الربط الوظيفة على الفور ، بل تقوم فقط بإرجاع وظيفة جديدة. يعد هذا مناسبا جدا عندما تحتاج إلى تمرير وظيفة كرد اتصال أو تعيين وظيفة كطريقة لكائن ما ، مع الحفاظ على ارتباطه بالكائن المطلوب.
استدعاء هو الأسلوب الذي يسمح لك لاستدعاء وظيفة مع تمرير قيمة محددة لهذه الكلمة ومجموعة من الحجج. على عكس طريقة الربط ، تستدعي طريقة الاتصال الوظيفة على الفور. يمكن استخدام طريقة الاستدعاء لاستدعاء الدالات ذات السياق المحدد عندما تحتاج إلى استخدام أساليب الكائن في كائن آخر ، أو لاستدعاء الدالات التي تتوقع أن يتم تمرير السياق من خلال هذا.
تطبيق هو الأسلوب الذي يسمح لك لاستدعاء وظيفة مع تمرير قيمة محددة لهذه الكلمة ومجموعة من الحجج. على عكس طريقة الاستدعاء ، تقبل طريقة التطبيق الوسائط كمصفوفة بدلا من الوسائط التي تم تعدادها. يمكن أن يكون هذا مفيدا إذا كانت الوسائط موجودة بالفعل في المصفوفة أو إذا كان عددها غير معروف مسبقا.
تسمح لك الطرق الثلاث-الربط والاستدعاء والتطبيق-بالتحكم في سياق استدعاء الوظيفة. ومع ذلك ، فإن الاختيار بينهما يعتمد على الاحتياجات المحددة وسهولة الاستخدام. إذا كنت بحاجة إلى إنشاء وظيفة ذات قيمة ملزمة لهذا وتمريرها كرد اتصال ، فمن الأفضل استخدام الربط. إذا كنت بحاجة إلى استدعاء دالة ذات سياق محدد ومجموعة من الوسائط ، فيمكنك استخدام الاتصال أو التطبيق ، اعتمادا على تنسيق وسيطات المرور.
- ربط-يخلق وظيفة جديدة مع قيمة ملزمة من هذا
- استدعاء-يدعو وظيفة مع قيمة معينة من هذا ومجموعة من الحجج
- تطبيق-يدعو وظيفة مع قيمة معينة من هذا ومجموعة من الحجج
مبادئ التشغيل
تم تصميم طرق الربط والاستدعاء والتطبيق لتغيير سياق تنفيذ الوظيفة في جافا سكريبت.
- ربط يخلق وظيفة جديدة عن طريق ربط إلى الكائن المحدد. نتيجة لاستدعاء هذه الوظيفة الجديدة ، سيكون سياق التنفيذ هو الكائن المحدد.
- استدعاء المكالمات الدالة مع السياق المحدد والوسيطات التي تم تمريرها (مفصولة بفواصل).
- تطبيق المكالمات دالة مع السياق المحدد والوسيطات التي تم تمريرها كمصفوفة.
تسمح لك الطرق الثلاث بتحديد الكائن الذي سيتم تنفيذ الوظيفة عليه بشكل صريح. نتيجة لذلك ، يتغير سياق تنفيذ الوظيفة ، وداخل الوظيفة يمكنك الوصول إلى خصائص وطرق الكائن المحدد.
على عكس ربط ، استدعاء وتطبيق استدعاء وظيفة على الفور. Это позволяет передать аргументы и получить результат выполнения.
Например, при использовании bind:
var obj = { name: "John" };
function sayHello() {
console.log("Hello, " + this.name);
}
var sayHelloBound = sayHello.bind(obj);
sayHelloBound(); // Выведет "Hello, John"
А при использовании call или apply:
var obj = { name: "John" };
function sayHello() {
console.log("Hello, " + this.name);
}
sayHello.call(obj); // Выведет "Hello, John"
sayHello.apply(obj); // مخرجات "مرحبا ، جون"
في كلتا الحالتين ، يتم استدعاء الوظيفة مع سياق الكائن ، وتتوفر خصائصها وطرقها داخل الوظيفة.
تكون طرق الاتصال والتطبيق مفيدة بشكل خاص عندما تحتاج إلى استدعاء دالة ذات وسيطات تحتاج إلى تمريرها كمصفوفة ، أو عند استدعاء دالة ، من المستحيل تحديد جميع الوسيطات مسبقا.
باستخدام ربط
تنشئ طريقة الربط دالة جديدة تربط سياقا معينا (هذا) ، وإذا لزم الأمر ، الوسيطات الأولية.
بناء جملة طريقة الربط:
وظيفة.ربط (ثيسارج [, أرج1 [, أرج2 [,...]]])
عند استدعاء دالة ملزمة باستخدام ربط ، سيشير هذا السياق إلى معلمة ثيسارج التي تم تمريرها في هذه الطريقة. أيضا ، إذا لزم الأمر ، يمكنك تمرير الحجج الأولية ، والتي سيتم إصلاحها عند استدعاء وظيفة جديدة.
مثال على استخدام الربط:
// إنشاء كائن شخص
فار شخص = {
الاسم:"جون",
العمر: 30
};
// إنشاء وظيفة سايهيلو باستخدام طريقة الربط
فار سايهيلو = وظيفة () {
وحدة التحكم.سجل ("مرحبا ، اسمي" + this.name + "وأنا" + هذا.العمر + " سنوات.");
}.ربط (شخص);
// استدعاء سايهيلو
سايهيلو () وظيفة ؛ / / المخرجات: مرحبا ، اسمي جون وأنا 30 سنة.
في المثال أعلاه ، نقوم بإنشاء كائن شخص بخاصيتين: الاسم والعمر. ثم نقوم بإنشاء وظيفة سايهيلو باستخدام طريقة الربط ، وربط هذا السياق داخل هذه الوظيفة إلى كائن الشخص. عندما يتم استدعاء وظيفة سايهيلو ، فإنه يخرج تحية مع الاسم والعمر من كائن الشخص.
وبالتالي ، فإن استخدام طريقة الربط يسمح لنا بربط وظيفة بكائن وسياق معين ، مما يوفر عملا أكثر مرونة مع وظائف في جافا سكريبت.
باستخدام مكالمة
تسمح لك طريقة الاتصال باستدعاء دالة عن طريق تحديد كائن آخر في سياق التنفيذ.
بناء الجملة:
وظيفة.مكالمة (ثيسارج, أرج1, أرج2,...)
أين:
- داخل الدالة التي يتم استدعاؤها.
- أر 1, أر 2,... هي الحجج التي سيتم تمريرها إلى الوظيفة.
مثال الاستخدام:
كونست شخص = {
الاسم:'جون',
العمر: 30
};
وظيفة إدخال () {
وحدة التحكم.سجل ('اسمي {{this.name وأنا {{هذا.العمر} سنة.`);
}
أعرض.دعوة (شخص);
ستكون نتيجة التنفيذ:
اسمي جون وأنا 30 سنة.
.
تسمح لك طريقة الاتصال أيضا باستخدام وظائف من كائنات أخرى في السياق الحالي:
كونست شخص 1 = {
الاسم: 'راشيل',
العمر: 28
};
كونست شخص2 = {
الاسم:'إميلي',
العمر: 32
};
وظيفة إدخال (شخص2 اسم) {
وحدة التحكم.سجل ('اسمي {{this.name وأنا {{هذا.العمر} سنة. سررت بلقائك {{اسم الشخص 2}!`);
}
أعرض.اتصل (شخص1, person2.name);
Результат выполнения будет:
اسمي راشيل وأنا 28 سنة. سررت بلقائك يا (إيميلي)!
.
باستخدام تطبيق
طريقة تطبيق هي واحدة من الطرق لاستدعاء وظيفة في جافا سكريبت. وهو مشابه لطريقة الاستدعاء ، ولكنه يقبل الوسائط كمصفوفة.
يبدو بناء جملة طريقة التطبيق كما يلي:
| الطريقة | الوصف |
|---|---|
| وظيفة.تطبيق (ثيسارج، [أرجسراي]) | يدعو وظيفة مع هذه القيمة المحددة والحجج ممثلة كمصفوفة. |
تحدد الوسيطة الأولى لطريقة التطبيق الكائن الذي سيتم استخدامه كقيمة لهذا داخل الوظيفة المسماة. الوسيطة الثانية هي مجموعة من الحجج التي سيتم تمريرها إلى الدالة المسماة.
على سبيل المثال ، لدينا دالة مجموع تضيف رقمين:
مجموع الدالة (أ ، ب) {
العودة أ + ب;
}
يمكننا استدعاء هذه الوظيفة باستخدام طريقة التطبيق على النحو التالي:
أرقام فار = [2 ، 3];
نتيجة فار = مجموع.تطبيق (لاغية ، أرقام) ؛ / / 5
في هذا المثال ، نقوم بتمرير قيمة فارغة كقيمة لهذا ، لأن دالة المجموع لا تستخدم هذا. ثم نقوم بتمرير مجموعة من الأرقام كوسيطات لتمريرها إلى دالة المجموع.
طريقة التطبيق مفيدة أيضا عند استدعاء دالة بعدد متغير من الوسائط:
وظيفة مضاعفة () {
نتيجة فار = 1;
إلى عن على (فار ط = 0; أنا < الحجج.الطول ؛ أنا {) {
النتيجة * = الحجج [أنا];
}
نتيجة الإرجاع;
}
[2 ، 3 ، 4];
نتيجة فار = ضرب.تطبيق (لاغية ، وسائط) ؛ / / 24
في هذا المثال ، تستخدم دالة الضرب كائن الوسائط ، الذي يحتوي على جميع الوسائط التي تم تمريرها. تسمح لك طريقة التطبيق بتمرير هذا الكائن كوسائط إلى وظيفة الضرب ، مما يسمح لك بالعمل مع عدد متغير من الوسائط.
وبالتالي ، تسمح لك طريقة التطبيق باستدعاء الوظائف بالقيمة المحددة لهذا ومجموعة من الوسائط. غالبا ما يتم استخدامه عند العمل مع الوظائف التي تأخذ عددا متغيرا من الوسائط أو عندما لا يكون استخدام هذه القيمة مطلوبا.
الاختلافات في نقل الحجج
ربط:
- إنشاء وظيفة جديدة مرتبطة بسياق معين.
- هي القيمة التي سيتم استخدامها على هذا النحو عند استدعاء وظيفة ذات صلة.
- هي الحجج التي سيتم تمريرها إلى الوظيفة المرتبطة عندما يتم استدعاؤها.
- فإنه لا يدعو وظيفة على الفور ، فإنه يعود وظيفة المجمع مع سياق ملزمة والحجج.
اتصل:
- يستدعي الوظيفة عن طريق ربط السياق وتمرير الوسيطات بشكل منفصل.
- هي القيمة التي سيتم استخدامها على هذا النحو عند استدعاء الوظيفة.
- هذه هي الحجج التي سيتم تمريرها إلى الوظيفة عندما يتم استدعاؤها.
- يستدعي الوظيفة على الفور.
تطبيق:
- يستدعي الوظيفة عن طريق ربط السياق وتمرير الوسيطات كمصفوفة.
- هي القيمة التي سيتم استخدامها على هذا النحو عند استدعاء الوظيفة.
- - هذه مجموعة من الوسيطات التي سيتم تمريرها إلى الوظيفة عندما يتم استدعاؤها.
- يستدعي الوظيفة على الفور.
يمر الحجج كمصفوفة.
أمثلة الاستخدام
فيما يلي أمثلة على استخدام طرق الربط والاستدعاء والتطبيق في جافا سكريبت:
- };
- console.log('Привет, ' + this.name);
- sayHello.call(user); // Вывод: "Привет, John"
تعمل طريقة التطبيق بشكل مشابه لطريقة الاستدعاء ، ولكنها تقبل الوسائط كمصفوفة. على سبيل المثال:
وظيفة سايهيلو (تحية) {
- وحدة التحكم.سجل (تحية + ' ، ' + this.name);
- }
كونست المستخدم = {
الاسم:'جون'