Я много искал, как делать свойства в Javascript. Большинство шаблонов раскрывающих модулей, которые я видел, имеют исключительно открытые функции, и по опыту я знаю, что если я открываю объект, я действительно получаю копию значения прямо здесь и тогда, таким образом, просто я мог бы иметь функцию getMyThing() и setMyThing и выставьте это. Однако я хочу выставить настоящие свойства
Я видел олдскульный defineGetter, которого я избегаю, и более новый Object.defineProperty( с которым у меня были настоящие проблемы. (Я мог легко использовать его против искусственного объекта, но не ЭТО внутри моего " module», ни свойство внутри моего модуля, которое я хотел раскрыть.
var myobj = (function() {
var name = "default name"
var sayName = function() { return "hello " + name }
return {
badname : name, //this won't change
sayName : sayName,
get name() { return name;},
set name(value) { name = value ;}
}
})()
alert("should be default because its just a copy: " + myobj.badname)
alert("should be default: " + myobj.name)
myobj.name = "karl"
alert("should be default because its just a copy: " + myobj.badname)
alert("should be karl: " + myobj.name)
Во всяком случае, я вижу в нескольких местах, что вы можете использовать ключевые слова get и set, и у меня есть следующий пример, который работает для меня, по крайней мере, в Firefox и ie10.
Мой вопрос: это приемлемый подход или есть скрытые ошибки, о которых я не знаю. Является ли этот подход наиболее приемлемым в современных браузерах? Как называется эта функция? и какое официальное название функции Object.defineProperty? Я предполагаю, что использование ключевого слова get и set - это геттеры и сеттеры ECMAScript5, но как называется другой?
и ключевые слова get и set упоминаются в этой таблице совместимости http://kangax.github.io/es5-compat-table/ в категории «Getter в инициализаторе свойства» и «Setter в инициализаторе свойства»?
пример на JSfiddle — http://jsfiddle.net/klumsy/NagbE/1/