Объект 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'
Почему такое поведение?
Вот ссылка ! к рабочему коду.