我正在努力理解javascript的基本概念。如果我在下面的第8行只使用“gear + = 1”,下面的代码似乎工作正常,但我不明白为什么当我使用“this.gear + = 1”时这不起作用。它给出了NaN的结果。谢谢。
(function bike(speed, tank, gear) {
var i = {};
i.speed = speed;
i.tank = tank;
i.gear = gear;
i.addgear = (function() {
// works fine with "return gear+= 1" Why not with "this"?
return this.gear += 1;
})();
console.log("mybike", i);
})(120, 12, 5);
有很多方法可以实现您正在寻找的东西,包括ES2015及以上的class
关键字或作为其基础的原型系统。这是一个非常简单的示例:
function bike(speed, tank, gear) {
return {speed, tank, gear, addGear: function() {return this.gear += 1}}
}
const myBike = bike(120, 12, 5)
console.log(myBike);
myBike.addGear();
console.log(myBike)
由于几个原因你的工作不起作用。首先,你永远不会从你最外面的功能中返回任何东西。其次,您创建并立即执行一个函数,其输出随后变为您的addGear
值。对代码的最简单修复将是这样的:
function bike(speed, tank, gear) {
var i = {};
i.speed = speed;
i.tank = tank;
i.gear = gear;
i.addgear = function() {
return this.gear += 1;
};
return i;
}
这与我上面写的相同。