
Вы когда-нибудь задумывались о добавлении новых свойств и методов к существующему классу или объекту !!

Да, это возможно в javascript.
Object.defineProperty () здесь, чтобы спасти
/*
suppose you want to add new methods to the pre-defined Date class in javascript
*/
/*
here we are going to add new method called "diff" to calculate difference between two dates in days
*/
Object.defineProperty(Date.prototype,'diff', {
value: (date1, date2) => {
return (new Date(date1) - new Date(date2))/(1000*60*60)/24
}
})
Object.defineProperty принимает три аргумента.
- Объект, на котором определяется свойство.
- Название метода, который нужно добавить
- Объект конфигурации
Объект конфигурации может содержать
- configurable: Boolean
trueтогда и только тогда, когда тип этого дескриптора свойства может быть изменен и если свойство может быть удалено из соответствующего объекта.
По умолчанию _2 _. - enumerable: Boolean
trueтогда и только тогда, когда это свойство отображается во время перечисления свойств соответствующего объекта.
По умолчаниюfalse. - значение: значение, связанное со свойством. Может быть любым допустимым значением JavaScript (числом, объектом, функцией и т. Д.).
- доступно для записи:
trueтогда и только тогда, когда значение, связанное со свойством, может быть изменено с помощьюassignment operator.
По умолчаниюfalse. - get: функция, которая служит получателем для свойства, или
undefined, если получателя нет. При обращении к свойству эта функция вызывается без аргументов и сthis, установленным для объекта, через который осуществляется доступ к свойству (это может быть не тот объект, для которого свойство определено из-за наследования). Возвращаемое значение будет использоваться как значение свойства.
По умолчаниюundefined. - set: функция, которая служит установщиком для свойства, или
undefined, если установщика нет. Когда свойство назначается, эта функция вызывается с одним аргументом (значение, присваиваемым свойству) и сthis, установленным для объекта, через который это свойство назначается.
По умолчаниюundefined.
const date1 = new Date('2020/02/10');
const date2 = new Date('2020/02/02');
// now we can use our new method
const diffrenceInDays = new Date().diff(date1, date2);
console.log(diffrenceInDays);
===== output =====
8
Точно так же мы можем добавлять новые методы и свойства к любому классу или объекту.
Ваше здоровье! 👋