Target1
@Target1

Работа с прототипами, как можно сделать лучше?

Разбираюсь с прототипами и появился вопрос как можно создать функцию в Object.prototype так что бы при обращение к ней она работала как length , что б был вызов был скобочок ()
"vasya".length
Вроде как и нашел решение , и работает то как оно мне надо, но есть сомнения, если способ покороче чтоль или более правильный
Object.defineProperty(Object.prototype, "revStr", {
      get: function () {
        return this.split("").reverse().join("");
      }
    });

    const person = {
        name:'Vasya',
        age:24
    }
    console.log(person.name.revStr)
  • Вопрос задан
  • 62 просмотра
Решения вопроса 2
Xuxicheta
@Xuxicheta
инженер
Сделать лучше очень просто - не надо так делать. Расширять стандартные объекты плохо, потом сами забудете где какие изменения.
Используйте обычное
const revStr = str => str.split("").reverse().join("");

При вызове занимает практически столько же места и всегда можно отследить откуда она взялась и никаких потенциальных конфликтов.
Да и что касается геттеров, лучше ими не злоупотреблять.
Ответ написан
profesor08
@profesor08 Куратор тега JavaScript
Поздравляют. Теперь у всех объектов есть данное свойство. У чисел, у строк, у других объектов, и тд. И твой код будет кидать ошибку везде, где не получится привести объект к строке. Если хочешь задать такой параметр для строк, так задавай его только для строк, а не для всего.

Object.defineProperty(String.prototype, "reverse", {
  get: function() {
    return this.split("").reverse().join("");
  }
});


И, на мой взгляд, лучше reverse объявить методом, а не свойством. Иначе неоднозначно все выглядит.

// Сразу видно, что это метод, который расширяет класс String и что-то там делает.
String.prototype.reverse = function() {
  return this.split("").reverse().join("");
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы