0
var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    fullName : function() {
        console.log(this.firstName + " " + this.lastName) 
        }()

};

Почему возвращает undefined undefined? Можно создать самовызывающиеся методы объекта внутри самого объекта?

  • 4
    Потому что зыса, о котором Вы думаете, в этом месте еще нет. –  Jun 15 '21 at 19:25
  • можно написать const person = {...}; person.fullName = (function(){...})(); – nörbörnën Jun 15 '21 at 19:34
  • Придется комментом ответить... надеюсь что хоть его не затрут, как предыдущие. Могут ли быть самовызывающиеся методы - да, могут. Но в литерал объекта добавить метод таким образом можно только если функция (которую предполагается сделать методом) объявлена вне литерала. В уже удаленном комменте я советовал подумать о результате выражения, и вот почему: используя оператор запятую, мы получим тот самый "самовызов", и при этом не сломаем значение свойства метода: const f = function (msg) { console.log(msg); }; const obj = { test: (f('iife? not exactly'), f), /*...*/ }; obj.test('but works'); – yar85 Jun 16 '21 at 20:50

1 Answers1

2

var person = {
  firstName: "John",
  lastName: "Doe",
  id: 5566,
  get fullName() {
    return this.firstName + " " + this.lastName;
  }
};

console.log(person.fullName);