Подтвердить что ты не робот

Что такое функции __defineGetter __() и __defineSetter __()?

Что представляют __defineGetter__() и __defineSetter__() в прототипе каждого Object?

4b9b3361

Ответ 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