示例参考 - ES5
<script>
/**
* 支付方案
* @param balance 余额
* @constructor
*/
function Payment(balance) {
this.balance = balance;
this.next = null;
}
/**
* 设置下一个责任节点(下一个工位)
* @param {Payment} payment
* @return {*}
*/
Payment.prototype.setNext = function (payment) {
return this.next = payment;
}
/**
* 是否可以支付
* @param {number} amount
* @return {boolean}
*/
Payment.prototype.canPay = function (amount) {
return this.balance >= amount;
}
/**
* 支付
* @param {number} amount 支付的数额
* @return {boolean}
*/
Payment.prototype.pay = function (amount) {
// 如果余额不足
if (!this.canPay(amount)) {
console.log(this.balance);
// 如果没有下一个支付方式,直接返回false
if (!this.next)
return false;
// 如果有下一个支付方式,就执行并返回执行结果
return this.next.pay(amount);
}
// 如果余额充足就减去消费数额
this.balance -= amount;
console.log(this.balance);
}
var subvention = new Payment(20);
var scholarship = new Payment(10);
var recharged = new Payment(50);
var amount = 30;
recharged
.setNext(subvention)
.setNext(scholarship);
recharged.pay(amount);
</script>
示例参考 - ES6
<script>
/**
* 支付方案
* @param balance 余额
* @constructor
*/
class Payment {
constructor(balance) {
this.balance = balance;
this.next = null;
}
/**
* 设置下一个责任节点(下一个工位)
* @param {Payment} payment
* @return {*}
*/
setNext(payment) {
return this.next = payment;
}
/**
* 是否可以支付
* @param {number} amount
* @return {boolean}
*/
canPay(amount) {
return this.balance >= amount;
}
/**
* 支付
* @param {number} amount 支付的数额
* @return {boolean}
*/
pay(amount) {
// 如果余额不足
if (!this.canPay(amount)) {
console.log(this.balance);
// 如果没有下一个支付方式,直接返回false
if (!this.next)
return false;
// 如果有下一个支付方式,就执行并返回执行结果
return this.next.pay(amount);
}
// 如果余额充足就减去消费数额
this.balance -= amount;
console.log(this.balance);
}
}
var subvention = new Payment(20);
var scholarship = new Payment(10);
var recharged = new Payment(50);
var amount = 30;
recharged
.setNext(subvention)
.setNext(scholarship);
recharged.pay(amount);
</script>
登录后评论