我的主要目标是建立一个简单的银行系统(转移,撤回,接收,交易历史,addCard),每个用户最多可以拥有3张卡。
这是我的代码:
const parameters = {
tax: 0.05,
cardsLimit: 3
}
function userCard(number) {
const cardInformation = {
balance: 100,
transactionLimit: 100,
historyLogs: [],
key: number
}
// getCardOptions - return iformation about card
function getCardOptions() {
return cardInformation;
}
// putCredits
function putCredits(amount) {
cardInformation.balance = cardInformation.balance + amount;
updateHistoryLogs('Received credits', amount)
}
// takeCredits
function takeCredits(amount) {
cardInformation.balance = cardInformation.balance - amount + amount * parameters.tax;
updateHistoryLogs('Withdrawal of credits', amount);
}
// setTransactionLimit
function setTransactionLimit(amount) {
cardInformation.transactionLimit = amount;
updateHistoryLogs('Transaction limit change', amount);
}
// transferCredits
function transferCredits(amount, card) {
let amountwithTaxes = amount + amount * parameters.tax;
if (amountwithTaxes > cardInformation.balance) {
console.log('Not enough money')
} else if (amountwithTaxes > cardInformation.transactionLimit) {
console.log('Amount exceed the Transaction limit')
} else {
this.takeCredits(amount);
card.putCredits(amount);
}
}
// Logs about past transactions
function updateHistoryLogs(operation, credits) {
let input = {
operation,
credits,
operationTime: new Date().toLocaleString('en-GB')
};
cardInformation.historyLogs.push(input);
}
return {
getCardOptions,
putCredits,
takeCredits,
setTransactionLimit,
transferCredits
};
}
// addCard/getcardbyKey
class UserAccount {
constructor(name) {
this.name = name;
this.cards = [];
}
addCard() {
if (this.cards.length < parameters.cardsLimit) {
console.log('You\'ve got too many cards')
} else {
this.cards.push(userCard(this.cards.length + 1));
}
}
getCardByKey(number) {
return this.cards[number - 1];
}
}
当我尝试执行它并进行多次交易时,发生以下错误:
未捕获的TypeError:无法读取未定义的属性'putCredits'
我已经在我的main函数中定义了putCredits属性,并且不知道为什么代码没有执行。
感谢任何帮助和建议!
这是我正在尝试执行的代码:
let user = new UserAccount('John');
user.addCard()
user.addCard()
let card1 = user.getCardByKey(1);
let card2 = user.getCardByKey(2);
card1.putCredits(1000);
card1.setTransactionLimit(500);
card1.transferCredits(500, card2);
card2.takeCredits(50);
console.log(card1.getCardOptions());
问题是你永远不会添加任何卡,因为你有一个不正确的if
条件。所以,当你试图访问一张卡片时:let card1 = user.getCardByKey(1);
你没有定义。
你的addCard if
条件应该是这样的:
if (this.cards.length > parameters.cardsLimit)
代码:
const parameters = {
tax: 0.05,
cardsLimit: 3
}
function userCard(number) {
const cardInformation = {
balance: 100,
transactionLimit: 100,
historyLogs: [],
key: number
}
// getCardOptions - return iformation about card
function getCardOptions() {
return cardInformation;
}
// putCredits
function putCredits(amount) {
cardInformation.balance = cardInformation.balance + amount;
updateHistoryLogs('Received credits', amount)
}
// takeCredits
function takeCredits(amount) {
cardInformation.balance = cardInformation.balance - amount + amount * parameters.tax;
updateHistoryLogs('Withdrawal of credits', amount);
}
// setTransactionLimit
function setTransactionLimit(amount) {
cardInformation.transactionLimit = amount;
updateHistoryLogs('Transaction limit change', amount);
}
// transferCredits
function transferCredits(amount, card) {
let amountwithTaxes = amount + amount * parameters.tax;
if (amountwithTaxes > cardInformation.balance) {
console.log('Not enough money')
} else if (amountwithTaxes > cardInformation.transactionLimit) {
console.log('Amount exceed the Transaction limit')
} else {
this.takeCredits(amount);
card.putCredits(amount);
}
}
// Logs about past transactions
function updateHistoryLogs(operation, credits) {
let input = {
operation,
credits,
operationTime: new Date().toLocaleString('en-GB')
};
cardInformation.historyLogs.push(input);
}
return {
getCardOptions,
putCredits,
takeCredits,
setTransactionLimit,
transferCredits
};
}
// addCard/getcardbyKey
class UserAccount {
constructor(name) {
this.name = name;
this.cards = [];
}
addCard() {
if (this.cards.length > parameters.cardsLimit) {
console.log('You\'ve got too many cards')
} else {
this.cards.push(userCard(this.cards.length + 1));
}
}
getCardByKey(number) {
return this.cards[number - 1];
}
}
let user = new UserAccount('John');
user.addCard()
user.addCard()
let card1 = user.getCardByKey(1);
let card2 = user.getCardByKey(2);
card1.putCredits(1000);
card1.setTransactionLimit(500);
card1.transferCredits(500, card2.getCardOptions().balance);
card2.takeCredits(50);
console.log(card1.getCardOptions());