"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > استخدام "الاتصال" و"التقديم" و"الربط" في نظام فواتير المطاعم.

استخدام "الاتصال" و"التقديم" و"الربط" في نظام فواتير المطاعم.

تم النشر بتاريخ 2024-11-02
تصفح:300

Using `call`, `apply`, and `bind` in a Restaurant Billing System.

نظرة عامة على السيناريو

في المطعم، يمكن للعملاء طلب أطباق متعددة، ونريد حساب فاتورتهم الإجمالية استنادًا إلى أسعار الأطباق المطلوبة وأي ضرائب وخصومات معمول بها. سنقوم بإنشاء وظيفة لحساب إجمالي الفاتورة واستخدام الاتصال والتطبيق والربط للتعامل مع العملاء المختلفين وطلباتهم.

مثال الكود

// Function to calculate the total bill
function calculateTotalBill(taxRate, discount) {
    const taxAmount = this.orderTotal * (taxRate / 100); // Calculate tax based on the total order amount
    const totalBill = this.orderTotal   taxAmount - discount; // Calculate the final bill
    return totalBill;
}

// Customer objects
const customer1 = {
    name: "Sarah",
    orderTotal: 120 // Total order amount for Sarah
};

const customer2 = {
    name: "Mike",
    orderTotal: 200 // Total order amount for Mike
};

// 1. Using `call` to calculate the total bill for Sarah
const totalBillSarah = calculateTotalBill.call(customer1, 10, 15); // 10% tax and $15 discount
console.log(`${customer1.name}'s Total Bill: $${totalBillSarah}`); // Output: Sarah's Total Bill: $117

// 2. Using `apply` to calculate the total bill for Mike
const taxRateMike = 8; // 8% tax
const discountMike = 20; // $20 discount
const totalBillMike = calculateTotalBill.apply(customer2, [taxRateMike, discountMike]); // Using apply with an array
console.log(`${customer2.name}'s Total Bill: $${totalBillMike}`); // Output: Mike's Total Bill: $176

// 3. Using `bind` to create a function for Sarah's future calculations
const calculateSarahBill = calculateTotalBill.bind(customer1); // Binding Sarah's context
const totalBillSarahAfterDiscount = calculateSarahBill(5, 10); // New tax rate and discount
console.log(`${customer1.name}'s Total Bill after New Discount: $${totalBillSarahAfterDiscount}`); // Output: Sarah's Total Bill after New Discount: $115

توضيح

  1. تعريف الوظيفة :

    • نقوم بتحديد دالة لحساب إجمالي الفاتورة التي تأخذ معدل الضريبة والخصم كمعلمات. تقوم هذه الوظيفة بحساب إجمالي الفاتورة عن طريق إضافة الضريبة إلى إجمالي الطلب وطرح أي خصومات.
  2. كائنات العميل:

    • نقوم بإنشاء عنصرين للعميل، العميل 1 (سارة) والعميل 2 (مايك)، كل منهما باسمه الخاص وإجمالي مبالغ الطلب.
  3. استخدام المكالمة:

    • بالنسبة لسارة، نقوم بحساب إجمالي فاتورتها باستخدام طريقة الاتصال. يتيح لنا ذلك تحديد customer1 كسياق وتمرير معدل الضريبة والخصم كوسائط منفصلة. يظهر الناتج إجمالي فاتورة سارة بعد تطبيق الضريبة والخصم.
  4. استخدام التطبيق:

    • بالنسبة لمايك، نستخدم طريقة التطبيق لحساب إجمالي فاتورته. تسمح لنا هذه الطريقة بتمرير المعلمات كمصفوفة، مما يجعلها ملائمة للتعامل مع وسائط متعددة. يتم حساب إجمالي الفاتورة لمايك بشكل مشابه ولكن بقيم ضرائب وخصم مختلفة.
  5. استخدام الربط:

    • نقوم بإنشاء وظيفة مرتبطة لسارة باستخدام الربط، والذي يقفل السياق على العميل 1. هذا يعني أنه يمكننا لاحقًا استدعاء هذه الوظيفة الجديدة دون الحاجة إلى تحديد ذلك مرة أخرى. لقد قمنا بتوضيح ذلك من خلال حساب إجمالي فاتورة سارة مرة أخرى بمعلمات مختلفة، مما يسمح بإجراء حسابات مستقبلية مرنة.

الإخراج

  • تعرض سجلات وحدة التحكم إجمالي الفواتير لكل من سارة ومايك بناءً على الطلبات والخصومات الخاصة بكل منهما.
  • يوضح هذا المثال بشكل فعال كيف يمكن استخدام الاتصال والتطبيق والربط لإدارة سياقات الوظائف داخل نظام فوترة المطاعم.

خاتمة

يسلط هذا السيناريو الضوء على كيفية استخدام الاتصال والتطبيق والربط في بيئة عملية، مثل حساب فواتير المطاعم، مما يساعد على فهم كيف تسهل هذه الأساليب إدارة ذلك في JavaScript.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/dharamgfx/using-call-apply-and-bind-in-a-restaurant-billing-system-249j?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3