繁体   English   中英

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

[英]Property value does not change after calling function that should have changed it

在以下JavaScript代码中,我使用闭包来构建对象。 当我打电话personA.addFriend()几次,叫personA.ListOfFriends()然后打印的价值personA.numOfFriends ,它仍然给我0,而不是2。

为什么没有得到值2?

 function person(name) { var name = name; var friends = []; var numOfFriends = 0; return { sayMyName: function() { return name; }, sayHello: function() { return "hello" + " " + name; }, addFriend:function(obj){ numOfFriends += 1; friends.push(obj) return "you just became friend with " + obj.sayMyName(); }, listFriends: function(){ return name + "! you have " + numOfFriends + " friends"; }, name: name, friends: friends, numOfFriends: numOfFriends } } var personA = person("Ali") var personB = person("Huda") var personC = person("Mona") personA.addFriend(personB); personA.addFriend(personC); personA.listFriends(); console.log(personA.numOfFriends); 

当您将numOfFriends分配给具有相同名称的属性时,您将拥有两个单独的值,两个值都有自己的生活。 以后增加numOfFriends变量时,该属性将不会更改。

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

this.numOfFriends+=1;
^^^^

和:

return name+"! you have "+this.numOfFriends+" friends";
                          ^^^^

对可能遇到相同问题的其他变量name执行相同的操作(如果您有更改它的方法)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM