Ну самый распространенный, но не самый разумный, вариант использования - расширение существующих прототипов (Object.prototype, Array.prototype), потому что с помощью дескрипторов можно настроить метод/свойство не перечисляемым (enumerable:false) и можно не бояться что при переборе for(key in myObject
) методы, которые Вы добавили, будут участвовать в переборе.
Лично я использую для методов и свойств прототипов, чтобы при переборе не использовать hasOwnProperty() и более гибко настроить доступ к ним.
Сеттеры и геттеры - в зависимости от задач. Допустим, для получения количества записей в коллекции гораздо лаконичней и правильней смотрится Collection.size
нежели Collection.size()