我有一个像这样的JavaScript类:
Dog = (function() {
var name;
function setName(_name) {
name = _name;
}
return {
setName: setName,
name: name
};
})();
当我跑步时:
Dog.setName('Hero');
Dog.name
始终是不确定的。
我当然缺少有关JS作用域的信息,但是呢?
您将返回一个对象,该对象的name
属性name
在该时间点的值为(未定义)。name
当name
IIFE内部的变量更新时,返回的对象的属性不会以某种方式动态更新。
有很多方法可以处理您似乎想做的事情。这是一个:
Dog = (function() {
var name;
function setName(_name) {
name = _name;
}
return Object.defineProperties({}, {
setName: { value: setName },
name: { get: function() { return name; } }
});
})();
这保留name
为私有变量,只能通过进行设置setName
,但是提供了用于获取其值的getter属性。
在另一个答案中提出的替代方法是等效的,只是编写方法不同:
return {
setName: function(n) { name = n; },
get name: function() { return name; }
};
次要点,但是在这种特定情况下,您不需要在IIFE上加上括号:
Dog = function() { }();
会很好的工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句