Добавить метод объекту JS

В данном уроке мы изучим 4 способа добавить новый метод к объекту. Пусть для примера у нас есть следующий объект с юзером:

javascriptlet obj = {
  name: 'john',
  surn: 'smit',
};

Давайте добавим новый метод к этому объекту с помощью различных способов.

Способ 1. Напрямую

Можно добавить метод сразу при объявлении объекта:

javascriptlet obj = {
  name: 'john',
  surn: 'smit',
  full: function() {
    return this.name + ' ' + this.surn;
  }
};

Вызовем наш метод:

javascriptconsole.log(obj.full()); // выведет 'john smit'

Способ 2. После объявления

Можно добавить метод после объявления объекта. Давайте сначала объявим объект:

javascriptlet obj = {
  name: 'john',
  surn: 'smit',
  full: function() {
    return this.name + ' ' + this.surn;
  }
};

А теперь добавим новый метод:

javascriptlet obj.full = function() {
  return this.name + ' ' + this.surn;
};

Вызовем наш метод:

javascriptconsole.log(obj.full()); // выведет 'john smit'

Способ 3. Через Object.defineProperty

Метод Object.defineProperty также позволяет добавить новый метод к объекту. Сделаем это:

javascriptObject.defineProperty(obj, 'full', {
  get: function() {
    return this.name + ' ' + this.surn;
  }
});

Вызовем наш метод:

javascriptconsole.log(obj.full()); // выведет 'john smit'

Способ 4. Через Object.assign

Метод Object.assign позволяет нам объединить несколько объектов в один. Мы можем использовать его для добавления методов в существующий объект. Давайте посмотрим на практике. Пусть у нас есть следующий объект:

javascriptlet obj = {
  name: 'john',
  surn: 'smit',
};

Пусть у нас также есть функция:

javascriptfunction full() {
  return this.name + ' ' + this.surn;
}

Объединим вместе наш объект и новый объект с нашей функцией:

javascriptobj = Object.assign({}, obj, {full: full});

Либо можно воспользоваться анонимной функцией:

javascriptobj = Object.assign({}, obj, {full: function() {
  return this.name + ' ' + this.surn;
}});

Вызовем наш метод:

javascriptconsole.log(obj.full()); // выведет 'john smit'