Как создать конструктор внутри объекта?

173
12 апреля 2018, 12:47

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

var obj = {
            list1:{petName:'Gyffy', 
                    petOwner:'Peter',
                    date: '2016-05-03',
                    time: '14:23',
                    note:'sfdsfsdfdsf'},
            list2:{petName:'Catty', 
                    petOwner:'Oleg',
                    date: '2017-05-03',
                    time: '16:23',
                    note:'xcxzcxcxc'},
            addObj: function(petName,petOwner,date,time,note){
                    this.petName = petName,
                    this.petOwner = petOwner,
                    this.date = date,
                    this.time = time,
                    this.note = note
            }       
        }
        obj.addObj('Kitty','Max','2014-06-03','14:34','bla bla');

В результате этого "кода") создаются свойства текущего объекта.

{list1: {…}, list2: {…}, addObj: ƒ, petName: "Kitty", petOwner: "Max", …}
addObj
:
ƒ (petName,petOwner,date,time,note)
date
:
"2014-06-03"
list1
:
{petName: "Gyffy", petOwner: "Peter", date: "2016-05-03", time: "14:23", note: "sfdsfsdfdsf"}
list2
:
{petName: "Catty", petOwner: "Oleg", date: "2017-05-03", time: "16:23", note: "xcxzcxcxc"}
list3
:
{petName: "dsfdsf", petOwner: "Olga", date: "2018-12-06", time: "13:23", note: "dsfsd"}
note
:
"bla bla"
petName
:
"Kitty"
petOwner
:
"Max"
time
:
"14:34"
__proto__
:
Object

Как мне реализовать вызов конструктора и создать новый объект в obj

Answer 1

var obj = { 
  list1: { 
    petName: 'Gyffy', 
    petOwner: 'Peter', 
    date: '2016-05-03', 
    time: '14:23', 
    note: 'sfdsfsdfdsf' 
  }, 
  list2: { 
    petName: 'Catty', 
    petOwner: 'Oleg', 
    date: '2017-05-03', 
    time: '16:23', 
    note: 'xcxzcxcxc' 
  }, 
  addObj: function(petName, petOwner, date, time, note) { 
    for (var i = 1; ; i++) { 
      if (!this["list" + i]) { 
        this["list" + i] = { 
          petName: petName, 
          petOwner: petOwner, 
          date: date, 
          time: time, 
          note: note 
        }; 
        break; 
      } 
    } 
  } 
} 
 
obj.addObj('Kitty', 'Max', '2014-06-03', '14:34', 'bla bla'); 
console.log(obj);

Answer 2

Если вы хотите дёрнуть функцию в качестве конструктора, то вам нужно вызывать её с new

var obj = { 
    list1:{petName:'Gyffy',  
            petOwner:'Peter', 
            date: '2016-05-03', 
            time: '14:23', 
            note:'sfdsfsdfdsf'}, 
    list2:{petName:'Catty',  
            petOwner:'Oleg', 
            date: '2017-05-03', 
            time: '16:23', 
            note:'xcxzcxcxc'}, 
    addObj: function(petName,petOwner,date,time,note){ 
            this.petName = petName, 
            this.petOwner = petOwner, 
            this.date = date, 
            this.time = time, 
            this.note = note 
    }        
} 
obj.list3 = new obj.addObj('Kitty','Max','2014-06-03','14:34','bla bla'); 
 
console.log(obj);

READ ALSO
JS - Копирование в буфер обмена

JS - Копирование в буфер обмена

Как скопировать данные из атрибута data-s="" в буфер обмена?

153
Почему Heroku не работает стабильно?

Почему Heroku не работает стабильно?

Я установил телеграм бот на Heroku, но он работает не стабильно, 5 минут работает 20-30 минут зависаетНо когда открыта страница Heroku с проектом всё...

184
Заполнить свойство через цикл

Заполнить свойство через цикл

Получаю массив со значениямиНужно все значения вывести на график

146
Найти из одного Массива данные цифры

Найти из одного Массива данные цифры

Если что-то непонятно, попробую объяснить по-другому

143