尝试在下面的输出中合并时,无法使用先前对象属性函数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 ";
},
};
答案 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所述,您应该存储cruise
,slow
stop
和driveTime
作为数字而不是字符串。我已经更新了我的例子来展示这一点。
进一步阅读
答案 1 :(得分:2)
另外,你正在对字符串进行数学运算,这不是一个好主意。以对象属性编号开头。
答案 2 :(得分:0)
starting
方法返回String
,因此将string
除以number
,结果为NaN