Что представляют __defineGetter__()
и __defineSetter__()
в прототипе каждого Object
?
Что такое функции __defineGetter __() и __defineSetter __()?
Ответ 1
См. MDN docs здесь для описания и примера кода:
Геттер - это метод, который получает значение определенного свойства. Setter - это метод, который задает значение определенного свойства. Вы можете определить геттеры и сеттеры на любом предопределенном основном объекте или определяемом пользователем объекте, который поддерживает добавление новых свойств.
Как отмечено в документах (и @cwallenpoole), функции __define[GS]etter__()
теперь устарели. Здесь содержится более подробная информация в в этой статье. Я полагаю, что defineProperty() теперь является предпочтительным синтаксисом.
Ответ 2
Чтобы ответить на ваш вопрос __defineGetter__()
и __defineSetter__()
, это старый/оригинальный способ создания getter и setter для свойства объекта. Они позволяют использовать свойство объекта в качестве пары имя/значение, а за кулисами эти пары имя/значение поддерживаются функциями.
Например, скажем, вы хотели бы ссылаться на некоторые случайные числа в фиксированных диапазонах. Вы можете выразить их как слова с максимальным диапазоном, и это будет выглядеть как свойство.
var random = {};
random.__defineGetter__('ten', function() {
return Math.floor(Math.random()*10); });
random.__defineGetter__('hundred', function() {
return Math.floor(Math.random()*100); });
Обратите внимание, что хотя приведенный выше пример отвечает на вопрос, вы не должны использовать это решение. Вместо этого вы должны использовать современную форму геттеров и сеттеров с ES5:
var random = {
get ten() { return Math.floor(Math.random()*10); },
get hundred() { return Math.floor(Math.random()*100); }
};
Любая из приведенных выше конструкций позволит вам получить случайное число, подобное этому:
var myrand = random.ten;
// returns a result in the range 0 to 9