Перегрузка метода в чужом классе в Javascript

270
16 июня 2018, 05:20

Есть код стороннего разработчика: Typescript, Angular. В этом коде нужно откорректировать формат вывода некоторых не примитивных данных, представленных объектами классов (например встроенный тип Date). Вывод полей осуществляется методом toString() этих объектов.
Можно ли произвести перегрузку метода в чужом классе Typescript (Javascript), например Date.toString()?

Answer 1

Да, можно переопределить метод и вызывать базовый (или даже не вызывать):

class MyDate extends Date {
    toString() {
        return 'my: ' + super.toString();
    }
}
md = new MyDate();
md.toString();  // my: Tue May 29 2018 10:16:20 GMT+0300 (RTZ 2 (зима))
Answer 2

В большинстве случаев можно переписать конкретный метод объекта, либо прототипа обычным присваиванием.

var d = new Date(); 
d.toString = function() { 
  return "custom date: " + this.getDate(); 
} 
console.log(d.toString()); 
 
Date.prototype.toString = function() { 
  return "custom prototype date: " + this.getDate(); 
} 
console.log(new Date().toString());

Однако это не всегда возможно, и для самого объекта и для его прототипа можно быть запрещено изменение какого-то конкретного свойства и в этом случае ничего сделать не получится.

Так как речь про сторонний код, то возможно в нем может существовать настройка формата, либо, как крайний случай, поменять нужный сторонний код, так как расширение прототипов встроенных объектов может повлиять на другие части.

READ ALSO
Нужна помощь с Local Storage

Нужна помощь с Local Storage

Есть вот такой вот скрипт, для выбора количество записей в таблице на странице

251
NodeJS отправка динамических данных через PUT

NodeJS отправка динамических данных через PUT

Необходимо создать PUT-запрос и отсылать по нему динамически получаемые данные

240
VUE.JS связка не работает

VUE.JS связка не работает

Не понимаю почему не работает vuejs

257