Я не уверен, правильно ли я понимаю.
Этот пример взят из MDN (Mozilla Developer Network):
var bValue;
Object.defineProperty(o, "b", {get : function(){ return bValue; },
set : function(newValue){ bValue = newValue; },
enumerable : true,
configurable : true});
Что происходит - это создает глобальную переменную с именем bValue, что еще не сделано. Я понимаю, что этот пример только демонстрирует использование, и, таким образом, все в порядке, если он создает глобальную переменную. Но если я собираюсь использовать это в приложении, я немного изменю его, добавив ключевое слово this
:
Object.defineProperty(o, "b", {get : function(){ return this.bValue; },
set : function(newValue){ this.bValue = newValue; },
enumerable : true,
configurable : true});
Теперь объект o
будет иметь свойство b
, и в то же время у него также будет другое свойство bValue
. Пользователь (программист) будет иметь доступ только к «b», а не к «bValue», хотя он все еще может напрямую обращаться к bValue - я не понимаю, как это можно предотвратить.
Я понимаю, что свойство b
и свойство bValue
не всегда могут быть одинаковыми, но b
будет зависеть от значения bValue
, поскольку метод получения и установки позволяют нам предварительно обрабатывать bValue перед назначением значение до b
.
Главный вопрос в том, правильно ли я понимаю? Или я что-то здесь упускаю?