目前,我正在学习JavaScript和正在学习基本OOP的freecodecamp.我正是在这一点上,我正在创建一个对象,并试图让这个对象返回我希望它返回的内容.
该项目的整个描述是:
对象有自己的属性,称为属性,以及它们自己的函数,称为方法.
在之前的挑战中,我们使用this关键字来引用当前对象的公共属性.
我们还可以创建私有属性和私有方法,这些方法无法从对象外部访问.
为此,我们使用我们熟悉的var关键字在构造函数内创建变量,而不是将其创建为此属性.
当我们需要存储有关对象的信息但我们想控制外部代码如何使用它时,这非常有用.
例如,如果我们想要存储我们的汽车行驶速度但我们只希望外部代码能够通过加速或减速来修改它,那么速度会如何变化?
在编辑器中,您可以看到实现此模式的Car构造函数的示例.
现在亲自尝试吧!修改Bike构造函数以使用名为gear的私有属性和两个名为getGear和setGear的公共方法来获取和设置该值.
现在我理解了它如何工作的基本概念,我理解我正在做什么,但是我也在使用它node terminal来自己尝试和调试,我得出的结论是该程序将齿轮加在一起每次:
> var Bike = function() {
...
... // Only change code below this line.
... var gear = 0;
...
... this.setGear = function(switchGear){
... gear += switchGear;
... };
...
... this.getGear = function() {
... return gear;
... };
... };
undefined
> var myBike = new Bike();
undefined
> myBike.setGear(4);
undefined
> myBike.getGear();
4
> myBike.setGear(4);
undefined
> myBike.getGear();
8
>
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释我在这里做错了什么吗?我不明白为什么要加在一起..谢谢..
资源:
var Bike = function() {
// Only change code below this line.
var gear = 0;
this.setGear = function(switchGear){
gear += switchGear;
};
this.getGear = function() {
return gear;
};
};
var myBike = new Bike();
Run Code Online (Sandbox Code Playgroud)
我想这对于软件中的所有错误都是如此,但它正是这样做的,因为你告诉它!
gear + = switchGear;
你说,把这个值添加到齿轮,所以它做到了.
编辑: OP的评论使他的困惑更清晰.
他似乎认为价值gear应该以某种方式"重置",并回归零.
不,函数Bike中的步骤在new Bike()调用时运行一次.变量gear保持不变,只有在通过方法更改时,其值才会更改.
gear += switchGear;
Run Code Online (Sandbox Code Playgroud)
翻译成
gear = gear + switchGear;
Run Code Online (Sandbox Code Playgroud)
如果您只想设置值,请执行
gear = switchGear;
Run Code Online (Sandbox Code Playgroud)