[英]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.