为什么我在不同的JS对象的方法产生相同的结果?

问题描述 投票:0回答:2

我学习JavaScript所以这里的任何帮助,将不胜感激。在下面的代码片段中,我创建了两个对象johnTip和markTip该计算约翰和马克的尖端总结。该方法tipCalculator实现两个对象以相同的方式。但是,调用markTip.calcTip()之后,我发现,tipsJohn将由tipsMark被覆盖,即,它们具有相同的价值观。有谁知道什么是错的场景,背后如何解决这一问题?谢谢。

我试着开关呼吁johnTip和markTip这种方法的顺序,但没有修复的bug。

预期的结果将是tipsJohn和tipsMark是单独的对象(阵列)。然而,似乎他们有相同的价值观markTip.calcTip被称为后。

var johnTip = {
  bills: [124, 48, 268, 180, 42],
  calcTip: function() {
    tips = [];
    finalBills = [];
    for (var i = 0; i < this.bills.length; i++) {
      if (this.bills[i] < 50) {
        tips[i] = this.bills[i] * 0.2;
      } else if (this.bills[i] < 200) {
        tips[i] = this.bills[i] * 0.15;
      } else {
        tips[i] = this.bills[i] * 0.1;
      }
      finalBills[i] = tips[i] + this.bills[i];
    }

    return [tips, finalBills];
  }
}

var markTip = {
  bills: [77, 375, 110, 45],
  calcTip: function() {
    tips = [];
    finalBills = [];
    for (var i = 0; i < this.bills.length; i++) {
      if (this.bills[i] < 100) {
        tips[i] = this.bills[i] * 0.2;
      } else if (this.bills[i] < 300) {
        tips[i] = this.bills[i] * 0.10;
      } else {
        tips[i] = this.bills[i] * 0.25;
      }
      finalBills[i] = tips[i] + this.bills[i];
    }

    return [tips, finalBills];
  }
}

let [tipsJohn, finalBillsJohn] = johnTip.calcTip();
let [tipsMark, finalBillsMark] = markTip.calcTip();
console.log('Mark\'s tip summary: ' + tipsMark);
console.log('Mark\'s final bills paid: ' + finalBillsMark);
console.log('John\'s tip summary: ' + tipsJohn);
console.log('John\'s final bills paid: ' + finalBillsJohn);
javascript object methods
2个回答
0
投票

当分配的变量,而不贴花它,它具有全局范围。

x = 5;

打造一个全局变量。

let x = 5;

创建仅具有范围与当前块的变量。

双方你阵列更改为

let tips = [];

let finalBills = [];

他们将不同的阵列。


0
投票

你宣布var finalBills; markTip和johnTip之外声明。你需要将它们存储在不同的var

© www.soinside.com 2019 - 2024. All rights reserved.