我有这个类(class)/服务:
var User = (function () {
'use strict';
var user;
function set( user ) {
user = user;
}
function getVotes() {
return user.votes;
}
return {
user : user,
set : set,
getVotes : getVotes
};
}());
我像这样存储用户:User.set( user );
但是当我尝试使用 User.user
检索用户或使用 User.getVotes()
获取用户投票时,我得到了未定义的信息。
为什么会这样?有更好的方法吗?
最佳答案
您需要为 setter 方法参数使用不同的名称。由于在引用 user
时,您在闭包变量和 setter 方法内的参数都使用了名称 user
,因此它只会引用参数而不是闭包项。
赋值操作不执行任何操作,因为它将变量的值赋给自身
var User = (function() {
'use strict';
var user;
function set(usr) {
user = usr;
}
function getVotes() {
return user.votes;
}
return {
user: user,
set: set,
getVotes: getVotes
};
}());
User.set({
name: 'x',
votes: 5
});
snippet.log('votes: ' + User.getVotes())
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
关于javascript - 如何让变量脱离闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32086193/