使用以前的对象属性函数中的值

时间:2017-03-12 19:57:37

标签: javascript

尝试在下面的输出中合并时,无法使用先前对象属性函数starting();中的值;为NaN函数获取timeTaken();。据推测,starting未在该函数内报告任何建议?

  starting : function() {
     return this.slow * this.driveTime + " mph ";
  },
  timeTaken : function() { 
     return this.starting / this.driveTime + " seconds ";
  },
document.getElementById("car").innerHTML = car.starting() +  car.timeTaken();

我是否应该尝试将两个函数嵌套在同一个函数中?我对更优化的方法持开放态度。

完整目标代码:

var car = {
  cruise: "35",
  slow: "5",
  stop: "0",
  driveTime: "4",
  starting : function() {
     return this.slow * this.driveTime + " mph ";
  },
  timeTaken : function() { 
       return this.starting / this.driveTime + " seconds ";
  },
 };

3 个答案:

答案 0 :(得分:6)

那是因为this.starting功能。基本上你要求JavaScript做的是"取starting函数并除以this.driveTime"。这是未定义的。

我猜你想要的是这样的:



var car = {
  cruise: 35,
  slow: 5,
  stop: 0,
  driveTime: 4,
  starting: function() {
    return this.slow * this.driveTime;
  },
  timeTaken: function() {
    return this.starting() / this.driveTime;
  },
  toString: function() {
    return this.starting() + " mph " + this.timeTaken() + " seconds ";
  }
};

console.log(car.toString());
console.log(car.starting());
console.log(car.timeTaken());




请注意,我将starting()timeTaken()更改为仅返回数字(而不是" x mph"或" x秒")。这允许您对这些函数的结果进行数学运算。

我添加了toString()函数,以便更容易获得我假设您要打印出来的数据的字符串表示。

编辑:正如Peter Behr answer所述,您应该存储cruiseslow stopdriveTime作为数字而不是字符串。我已经更新了我的例子来展示这一点。

进一步阅读

答案 1 :(得分:2)

另外,你正在对字符串进行数学运算,这不是一个好主意。以对象属性编号开头。

答案 2 :(得分:0)

starting方法返回String,因此将string除以number,结果为NaN