javascript - 使用 Javascript 创建新对象以重用代码

标签 javascript

我正在尝试重新使用对象“提示”,下面是创建对象的代码

class tipArray extends Array{

    sum() {

        return this.reduce((sum,current) => sum + current)
    }
}

var tips = {
    bills: new tipArray(),
    newTip: function(){
        bills: new tipArray();
    },
    addTip: function(val){
        this.bills.push(val)
    },
    getTip: function(bills)  {
        for(i = 0;i <= this.bills.length - 1; i++)   {
            if(this.bills[i]<50){
                this.tipval= this.bills[i] * 0.2
                console.log(this.tipval)
            }
            else if(this.bills[i]>= 50 && this.bills[i] < 200){
                this.tipval = this.bills[i] * 0.15
                console.log(this.tipval)
            }
            else if(this.bills[i]>= 200){
                this.tipval= this.bills[i] * 0.1
                console.log(this.tipval)
            }
        }
    },
    getAvg: function(){
        this.avgVal = this.bills.sum()/(this.bills.length);
        return this.avgVal;
    },
    getSum: function() {
        return this.bills.sum();
    }
}

然后我运行下面的代码来查找输出

var fam1 = tips;
fam1.addTip(10);
fam1.addTip(50);
fam1.getTip();

output = 2, 4

当我尝试创建一个新对象时

var fam2 = tips;
fam2.addTip(30);
fam2.addTip(80);
fam2.getTip();

expected output = 6, 12
output = 2,4,6,12

如何重新初始化对象并获得预期的输出?

最佳答案

为什么不上课并通过使用提前返回范例来缩短 getTip 呢。

class tipArray extends Array{
    sum() { return this.reduce((sum,current) => sum + current); }
}

class Tips {
    constructor () {
        this.bills = new tipArray();
    }
    
    newTip() {
        this.bills = new tipArray();
    }
    
    addTip(val) {
        this.bills.push(val);
    }
    
    getTip() {
        return this.bills.map(val => {
            if (val < 50) {
                return val * 0.2;
            }
            if (val < 200) {
                return val * 0.15;
            }
            return val * 0.1;
        });
    }
    
    getAvg () {
        this.avgVal = this.bills.sum() / this.bills.length;
        return this.avgVal;
    }
    
    getSum () {
        return this.bills.sum();
    }
}

var fam1 = new Tips;
fam1.addTip(10);
fam1.addTip(50);
console.log(fam1.getTip());

var fam2 = new Tips;
fam2.addTip(30);
fam2.addTip(80);
console.log(fam2.getTip());

关于javascript - 使用 Javascript 创建新对象以重用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52648931/

相关文章:

javascript - Chrome 与 FireFox 中的 window.XMLHttpRequest

javascript - 在使用 puppeteer 进行脚本评估之前注入(inject) HTML

JavaScript 和数据存储在数据库中

javascript - CSS 移动导航下拉菜单 - 对齐

javascript - 如何保持页面刷新和导航历史记录

javascript - Bootstrap 导航栏链接和 JavaScript - 无法读取 'slice' 的属性 'undefined'

javascript - setAttribute ('src' ,'page.html' ) 不工作

javascript - 使用来自 http.get 的数据更新 app.get 响应

javascript - 如何在nodejs typescript 中设置变量

javascript - 第二次追加不适用于 jquery