Поскольку он нужен только для работы на платформе Mozilla, вы можете определить геттер без соответствующего сеттера. Лучший способ сделать это по-разному для каждого из ваших примеров.
В литерале объекта для него существует специальный синтаксис:
var XU = {
get Cc() { return Components.classes; }
};
Во втором экзамене вы можете использовать метод __defineGetter__
, чтобы добавить его либо к aXU.prototype
, либо к this
внутри конструктора. Какой способ лучше, зависит от того, отличается ли значение для каждого экземпляра объекта.
Редактировать: Чтобы помочь с проблемой читабельности, вы можете написать функцию, например defineConstant
, чтобы скрыть уродство.
function defineConstant(obj, name, value) {
obj.__defineGetter__(name, function() { return value; });
}
Кроме того, если вы хотите выдать ошибку, если попытаетесь назначить ее, вы можете определить установщик, который просто выбрасывает объект Error:
function defineConstant(obj, name, value) {
obj.__defineGetter__(name, function() { return value; });
obj.__defineSetter__(name, function() {
throw new Error(name + " is a constant");
});
}
Если все экземпляры имеют одинаковое значение:
function aXU() {
}
defineConstant(aXU.prototype, "Cc", Components.classes);
или, если значение зависит от объекта:
function aXU() {
// Cc_value could be different for each instance
var Cc_value = return Components.classes;
defineConstant(this, "Cc", Cc_value);
}
Для получения более подробной информации, вы можете прочитать документацию Mozilla Developer Center .