Недавно я прочитал о том, что есть возможность определять геттеры/сеттеры в JavaScript. Это кажется чрезвычайно полезным - сеттер - это своего рода "помощник", который может анализировать значение, которое нужно установить первым, прежде чем устанавливать его.
Например, у меня есть этот код:
var obj = function(value) {
var test = !!value; // 'test' has to be a boolean
return {
get test() { return test },
set test(value) { test = !!value }
};
};
var instance = new obj(true);
Этот код всегда преобразует value
в логическое. Поэтому, если вы код instance.test = 0
, то instance.test === false
.
Однако для этого вам нужно фактически вернуть объект, что означает, что новый экземпляр не имеет тип obj
, а просто является простым объектом. Это означает, что изменение прототипа obj
не влияет на экземпляры. Например, это работает не - instance.func
есть undefined:
obj.prototype.func = function() { console.log(this.value); };
потому что instance
не имеет типа obj
. Чтобы заставить функции прототипа работать, я предполагаю, что я не должен возвращать простой объект, но не возвращать ничего, поэтому instance
будет иметь тип obj
, как работает обычный конструктор.
Проблема в том, как реализовать геттеры/сеттеры? Я могу найти статьи, описывающие, как добавлять их к объекту, а не как часть конструктора настраиваемого типа.
Итак, как мне реализовать getters/setters в конструкторе, чтобы иметь возможность использовать геттеры/сеттеры и расширять прототип?