Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用本应更改属性值的函数后,属性值不会更改_Javascript_Closures - Fatal编程技术网

Javascript 调用本应更改属性值的函数后,属性值不会更改

Javascript 调用本应更改属性值的函数后,属性值不会更改,javascript,closures,Javascript,Closures,在下面的JavaScript代码中,我使用闭包来构建一个对象。当我多次调用personA.addFriends()时,调用personA.listofriends(),然后打印personA.numfriends的值,它仍然给我0而不是2 为什么它没有得到值2 职能人员(姓名){ 变量名称=名称; var-friends=[]; var numofriends=0; 返回{ sayMyName:function(){ 返回名称; }, sayHello:function(){ 返回“hello

在下面的JavaScript代码中,我使用闭包来构建一个对象。当我多次调用
personA.addFriends()
时,调用
personA.listofriends()
,然后打印
personA.numfriends
的值,它仍然给我0而不是2

为什么它没有得到值2

职能人员(姓名){
变量名称=名称;
var-friends=[];
var numofriends=0;
返回{
sayMyName:function(){
返回名称;
},
sayHello:function(){
返回“hello”+“”+name;
},
addFriend:函数(obj){
numofriends+=1;
好友推送(obj)
return“您刚刚与”+obj.sayMyName()成为朋友”;
},
listFriends:function(){
返回name+“!您有”+numofriends+“friends”;
},
姓名:姓名,,
朋友:朋友,,
numOfFriends:numOfFriends
}
}
var personA=个人(“阿里”)
var personB=个人(“Huda”)
var personC=个人(“Mona”)
添加朋友(personB);
添加朋友(personC);
personA.listFriends();

console.log(personA.numofriends)
当您将
numofriends
分配给同名的属性时,您将拥有两个独立的值,它们都有各自的生命。稍后当
numofriends
变量递增时,该属性不会更改

要解决此问题,不应在方法中引用变量,而应引用属性。这样做:

this.numOfFriends+=1;
^^^^
以及:


对另一个可能出现同样问题的变量
name
(如果您有方法更改它的话)执行同样的操作。

此代码肯定会抛出错误,第一个return语句不在任何函数中。请同时发布代码的第一行:-)对此表示抱歉。我添加了函数名。非常感谢@trincot,你救了我的命!如果你觉得我的问题够清楚,你能把它投上去吗。非常感谢。
return name+"! you have "+this.numOfFriends+" friends";
                          ^^^^