我基本上是从java背景,所以我编写了一个JavaScript代码,其中一个变量充当私有变量,这是我的代码
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-score: 6
但实际输出是
球队得分是多少:6; 什么是M分数: 0
为什么M-score为0?
答案 0 :(得分:4)
那是因为getMScore
初始化为零,并且永远不会改变。
属性getMScore
不是对teamScore
变量的引用,它仅在创建对象时使用teamScore
变量的值进行初始化。更改teamScore
变量后,getMScore
属性不受影响。
答案 1 :(得分:3)
这是因为getScore
是一个函数,并且在您调用它时它将获得teamScore
的实际结果。但是getMScore
只是在返回之前设置的简单静态值。请注意getMScore
不是某种"快捷方式"或"指针"到teamScore
,它只是简单的价值。
要解决此问题,您应该将getMScore写为函数,例如:
getMScore : function() { return teamScore; }
并将其称为:
alert ("What is the M-score :" + myObject.getMScore())
答案 2 :(得分:2)
当你的团队得分最初为0时,myObject
中你所指的getMScore已被分配给0,
因此,即使您更改了teamscore的值,它仍会返回在更改teamscore值之前返回的值
答案 3 :(得分:2)
getMScore
已使用0
因为当您定义object
时teamScore
等于0
而getMScore : teamScore
也会得到0
并不重要,您之后会更改它。< / p>
答案 4 :(得分:2)
如果仔细观察,getScore是一个函数,在调用时返回teamScore的当前值。 所以,当你调用myObject.playSix(); teamScore将成为6。 现在调用getScore会返回teamScore = 6的当前值
另一方面,getMScore被分配到teamScore的初始值(为0)并保持不变。 希望它有意义。
答案 5 :(得分:1)
当定义对象时,您设置的是teamScore = 0
,然后是getMScore : teamScore
。换句话说,teamScore
的值将用于初始化getMScore
。
请注意,“值”是关键字 - 此代码未将引用分配给teamScore
变量,它实际上只是复制当前价值从一个到另一个。 <{1}}如果getMScore
有效,teamScore
将不会改变,因为这两个值是独立的。