考虑这个简单的 JavaScript 模块模式:
var human = (function () {
var _name = '';
return {
name: _name,
setName: function (name) {
_name = name;
}
}
})();
human.setName('somebody');
alert(human.name); // shows an empty string
human = (function () {
var _name = '';
return {
name: function() {
return _name;
},
setName: function (name) {
_name = name;
}
}
})();
human.setName('somebody');
alert(human.name()); // shows 'somebody'
为什么第二个关闭工作正常,而第一个关闭不工作?请参见此处的示例。
另请参阅这个 fiddle,它证明可以使用简单的属性来代替 getter 函数。