Javascript产生不需要的输出
我基本上来自java背景,所以我编写了一个JavaScript代码,其中一个变量充当私有变量,下面是我的代码Javascript产生不需要的输出,javascript,Javascript,我基本上来自java背景,所以我编写了一个JavaScript代码,其中一个变量充当私有变量,下面是我的代码 var myObject = function(){ var teamScore = 0; return { playSix: function() { teamScore += 6 }, playFour: function() { teamScore = teamSc
var myObject = function(){
var teamScore = 0;
return {
playSix: function() {
teamScore += 6
},
playFour: function() {
teamScore = teamScore +4
},
getScore: function(){
return teamScore;
},
getMScore : teamScore
}
}();
myObject.playSix();
alert ("What is the team score :" + myObject.getScore())
alert ("What is the M-score :" + myObject.getMScore)
期望输出为
球队得分:6分;
M分数是多少:6分
但实际产出是
球队得分:6分;
M分数是多少:0
为什么M-score为0?当teamscore最初为0时,您在myObject中引用的getMScore已被指定为0 因此,即使您更改teamscore的值,它仍将返回在更改teamscore的值之前返回的值。定义对象时,您将teamscore设置为0,然后获取mscore:teamscore。换句话说,teamScore的值将用于初始化getMScore 请注意,value是这里的关键词-此代码并没有为teamScore变量指定引用,它只是将当前值从一个复制到另一个。如果teamScore更改,则getMScore不会更改,因为这两个值是独立的。这是因为getMScore初始化为零,并且从不更改 属性getMScore不是对teamScore变量的引用,它仅在创建对象时使用teamScore变量的值进行初始化。更改teamScore变量时,getMScore属性不受影响。之所以会发生这种情况,是因为getScore是一个函数,它将在您调用它的所有时间获得teamScore的实际结果。但getMScore只是返回之前设置的简单静态值。请注意,getMScore不是指向teamScore的某种快捷方式或指针,它只是一个简单的值 要解决此问题,应将getMScore编写为函数,例如:
getMScore : function() { return teamScore; }
这样称呼它:
alert ("What is the M-score :" + myObject.getMScore())
getMScore已用0初始化
因为当您定义对象时,teamScore等于0,getMScore:teamScore也会得到一个0,不管您以后是否更改它。如果仔细观察,getScore是一个函数,调用它时返回teamScore的当前值。 所以,当你调用myObject.playSix时;teamScore将变为6。 现在调用getScore将返回teamScore=6的当前值 另一方面,getMScore被分配给teamScore的初始值,该值为0,并且保持不变。
希望有意义。谢谢,这么简单的事情,明白了: