تطبيق () تعريف الطريقة
طريقة تطبيق () للوظيفة وطريقة الاتصال لها نفس الوظيفة ، ولكن الفرق هو أن المعلمات المستلمة مختلفة.
تتلقى طريقة تطبيق () معلمتين ، إحداهما كائن والآخر عبارة عن مجموعة من المعلمات.
تطبيق () وظيفة
1. يستخدم لتمديد نطاق الوظيفة
مثال:
var color = 'red' ؛ var o = {color: 'blue'} ؛ function seallor () {console.log (this.color) ؛} saycolor () ؛ // "red" saycolor.apply (o) ؛ // "Blue"هنا ، ترتبط الوظيفة ديناميكيًا بالكائن O من خلال طريقة تطبيق (). في هذا الوقت ، يشير هذا إلى كائن O ويحصل على النتيجة "الأزرق".
2. الكائنات لا تحتاج إلى أي علاقة اقتران مع الأساليب.
دعنا نقدم مثالاً على الاقتران أدناه لمعرفة كيفية حل هذا الاقتران عن طريق التقديم.
var color = 'red' ؛ var o = {color: 'blue'} ؛ function sexercolor () {console.log (this.color) ؛} o.saycolor = saycolor ؛ o.saycolor () ؛ // "Blue"هنا ، يتم وضع الوظيفة أولاً في الكائن O ، ويتم اقتران الكائن والطريقة بشكل وثيق معًا ، ويجب أن تمر استدعاء الطريقة عبر الكائن O.
إنها ليست مرنة مثل استخدام طرق تطبيق () و Call ().
Refactor الرمز أعلاه للحصول على الرمز في المثال السابق.
var color = 'red' ؛ var o = {color: 'blue'} ؛ function seallor () {console.log (this.color) ؛} saycolor () ؛ // "red" saycolor.apply (o) ؛ // "Blue"لا توجد طريقة مرتبطة بالكائن هنا ، ولكن عندما يكون من الضروري استخدامه ، استخدم طريقة تطبيق الوظيفة أو الاتصال لربطها ديناميكيًا.
لا يوجد اقتران بين الكائنات والأساليب. هنا يمكن أيضًا القيام به من خلال طريقة BIND () التي توفرها ES5.
3. تنفيذ نقل المعلمة المعلمة المتغيرة
الوظيفة التالية لحساب متوسط القيمة لأي رقم
المتوسط (، ، المتوسط () ؛ المتوسط (،،،، ،) ؛ المتوسط (،،،،،) ؛ المتوسط (،،،،،) ؛) ؛) ؛) ؛) ؛
الوظيفة المتوسطة هي مثال يسمى معلمة قابلة للتغيير أو وظيفة عنصر قابلة للتغيير (يشير عدد عناصر الوظيفة إلى العدد المطلوب من المعلمات).
بالطبع ، يمكن أيضًا كتابة هذه الوظيفة في شكل صفيف استلام.
MedialOfarray ([،،]) ؛ MedialOfarray ([]) ؛ MedialOfarray ([،،،،،،،]) ؛ MedialOfarray ([،،،،،،،،]) ؛
الوظائف التي تستخدم المعلمات المتغيرة أكثر إيجازا وأنيقة. تحتوي وظائف المعلمة المتغيرة على بناء جملة مناسب ، على الأقل السماح للمتصل بمعرفة مسبقًا عدد المعلمات المقدمة.
إذا كان لدي صفيف مثل هذا
عشرات VAR = getAllScores () ؛
كيفية حساب متوسط القيمة باستخدام وظيفة المتوسط؟
1. إصدار دالة المعلمة المتغير.
في هذا الوقت ، يمكن استخدامه بالاقتران مع طريقة تطبيق (). نظرًا لأن الوظيفة لا تستخدم المرجع هذا المتغير ، فإننا نمرر فارغًا للمعلمة الأولى. الرمز كما يلي:
var scores = getAllScores () ؛ mealder.apply (null ، scores) ؛
2. المعلمات المباشرة في شكل صفيف
هنا يمكنك تمرير معلمات الصفيف مباشرة.
عشرات VAR = getAllScores () ؛ MEANTEROFARRAY (الدرجات) ؛
أنا شخصياً أعتقد أن كلا من النموذجين أعلاه على ما يرام ، لكن النموذج الثاني أبسط. تعرف على المزيد حول طريقة ما ، والتي يمكن التعامل معها بسهولة عند مواجهة الوظائف التي كتبها الآخرين دون إعادة تمثيل الرمز. هذه الفائدة أكثر.
4. تنفيذ نقل قيمة طرق المعلمة المتغيرة
مثال: يحتوي الكائن المخزن المؤقت على طريقة إلحاق المعلمة القابلة للتغيير ، والتي تتم إضافتها إلى صفيف الحالة داخل الوظيفة.
var buffer = {state: [] ، append: function () {for (var i = ، n = edation.length ؛ i <n ؛ i ++) {this.state.push (enciles [i]) ؛}} ؛في هذا الوقت ، يمكن أن تقبل طريقة إلحاق أي معلمات متعددة.
buffer.append ('hello ،') ؛ buffer.append ('firtname' ، '' ، 'lastName' ، '!') ؛ buffer.append ('newline') ؛شكل مثل
Buffer.Append (Arg1 ، Arg2 ، Arg3 ، ...)
باستخدام هذه المعلمة من طريقة تطبيق ، يمكننا تحديد صفيف قابلة للحساب لاستدعاء طريقة إلحاق.
buffer.append.apply (buffer ، getInputStrings ()) ؛
ملاحظة: المخزن المؤقت هنا مهم. إذا تم تمرير كائن مختلف ، فسيحاول طريقة الإلحاق تعديل خاصية الحالة للكائن الخطأ.
تَلمِيح
• استخدم طريقة تطبيق لتحديد صفيف المعلمة القابل للحساب لاستدعاء وظيفة مع معلمات قابلة للتغيير
• استخدم المعلمة الأولى من طريقة تطبيق لتوفير جهاز استقبال لطريقة المعلمة المتغيرة
التذييل 1
وظيفة متوسط
الوظيفة المتوسطة () {var args = []وظيفة المتوسط argarray
الوظيفة المتوسطة argarray (arr) {var sum = arr.reduce (function (prev ، cur) {return prev+cur ؛}) ؛ return parseint (sum/arr.length ،) ؛}ES5 BIND () طريقة
تنشئ هذه الطريقة مثيلًا لدالة ترتبط قيمتها بالقيمة التي تم تمريرها إلى وظيفة BIND ().
على سبيل المثال
var color = 'red' ؛ var o = {color: 'blue'} ؛ function sexercolor () {console.log (this.color) ؛} var osaycolor = saycolor.bind (o) ؛ osaycolor () ؛ // "الأزرق"متوافق مع الإصدارات المنخفضة ، راجع الإصدار التالي:
if (! function.prototype.bind) {function.prototype.bind = function (othis) {if (typeof this! == 'function') {// أقرب شيء ممكن إلى ecmascript // iscallable functionthrow new typeerror ('function.prototype. [] propertyfnop.prototype النموذج الأولي = this.prototype ؛ } fbound.prototype = new fnop () ؛ return fbound ؛} ؛}