【发布时间】:2019-04-23 17:26:25
【问题描述】:
对象“person”有一个私有变量“name”。此私有变量无法使用对象引用直接更新。
使用 IIFE 来解决这个问题。 IIFE 将返回 'name' 变量、'get' 和 'update' 方法分别用于获取和更新名称。
const person = (function () {
let name;
var obj = {};
init();
function init() {
name = 'dravid';
}
function getName() {
return name;
}
function modifyName(newName) {
name = newName;
}
Object.defineProperties(obj, {
'name': {
value: name,
writable: false
},
'get': {
value: getName,
writable: false
},
'update': {
value: modifyName,
writable: false
}
});
return obj;
})();
让我们看看下面这段代码在做什么。
person.name // returns 'dravid'
person.name = 'dhoni'
person.name // still returns 'dravid'
现在,还有一些……
person.get() // returns 'dravid'
person.update('dhoni')
person.get() // returns 'dhoni'
上面几乎是需要的,除了混淆。
person.name // still returns 'dravid' instead of 'dhoni'
为什么会有这样的行为?
这里是the link!到工作代码。
【问题讨论】:
-
'name': {value: name}好吧,反正你认为它是 value。 -
writable:true当且仅当与属性关联的值可以通过赋值运算符进行更改。 -
@Andreas 这也行不通
标签: javascript iife