簡體   English   中英

如何使 2 個 object 實例使用銀行帳號屬性進行通信?

[英]How to make 2 object instances communicate using a bank account number property?

我是一個修補類的初學者。

我正在嘗試創建 2 個單獨的銀行實例,並讓它們使用它們的屬性之一進行通信。 該屬性是一個銀行帳號。

一個銀行實例旨在能夠使用其銀行帳號作為一種驗證形式將一定數量的資金轉移到另一個銀行實例。

在展示代碼之前,請理解我是在這里實驗和學習的。 我知道銀行 Class 不應擴展 BankAccount class。

看看這段代碼:

class BankAccount{
        constructor(balance)
        {
                this.balance;
        }
        withdraw(amount)
        {
                this.balance -= amount;
        }
        deposit(amount)
        {
                this.balance += amount;
        }
}

class Bank extends BankAccount{
        constructor(balance,accNum)
        {
                super(balance);
                this.accNum = accNum;
        }
        transfer(fromAccNum,toAccNum,amount)
        {
                if(this.accNum === fromAccNum)
                        super.withdraw(amount);
                toAccNum.BankAccount.deposit(amount);
        }
}

BankAccount class 僅具有余額和兩種在提款或存款時更新余額的方法。

銀行 class 在組合中添加了一個額外的屬性,即銀行帳號,這就是使這一挑戰變得有趣的原因。

假設我要像這樣創建銀行 class 的兩個實例:

var acc01 = new Bank(10000,12345); // a balance of 10 000 and account number 12345
var acc02 = new Bank(1000,54321); // a balance of 1000 and a account number 54321

使用這兩個單獨的帳戶,我想調用 transfer 方法並讓它從 acc01 向 acc02 匯款。

像這樣的東西:

acc01.transfer(acc01.accNum,acc02.accNum,1000);

上面的行只是將 accNum 12345 作為第一個參數傳入,這是我們要從中提取並發送到另一個帳號 54321 的帳號。第二個參數 54321 是我們要匯款到的帳號。 第三個參數是我們想要發送的金額。

在 acc01 上調用 transfer 方法后預期的結果:

console.log(acc01.balance); // balance should be updated to 9000
console.log(acc02.balance); // balance should be updated to 2000

我似乎無法弄清楚如何使這項工作? 有人可以在這里救我嗎?

您可以擁有一個保存銀行實例並管理交易的 BankManager class。

class BankManager{
    constructor()
    {
       this.accounts = [
           new Bank(10000, 12345),
           new Bank(1000, 54321)
       ];
    }
    transfer(toAcc, fromAcc, amount)
    {
       if (fromAcc.balance >= amount) {
           fromAcc.withdraw(amount);
           toAcc.deposit(amount);
       }
    }
    transferByNum(toAccNum, fromAccNum, amount)
    {
       const toAcc = this.accounts.find(acc => acc.accNum === toAccNum);
       const fromAcc = this.accounts.find(acc => acc.fromAcc === fromAccNum);
       this.transfer(toAcc, fromAcc, amount);
    }
}

我認為您的問題是 transfer 方法除了擁有自己的帳戶號外,還接受“from”和“to”。 這意味着在某些情況下,會在完全不相關的帳戶上調用 transfer 方法。

您想將其重構為

    transfer(toAcc,amount)
        {
                super.withdraw(amount);
                toAcc.deposit(amount);
        }

另請注意,您需要實際的帳戶實例,而不僅僅是帳戶編號,因為您沒有基於帳戶編號檢索銀行帳戶 object 的機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM