Почему функция в JavaScript выполняется без явного вызова?

function собака() {
  this.голос = new function() {
    alert('гав');
  }
}

let шарик = new собака();

Я новичок в JavaScript и столкнулся с интересным поведением. В коде выше я создаю объект собака с методом голос. Но когда я создаю экземпляр шарик, функция голос срабатывает автоматически, хотя я её не вызывал.

Почему так происходит? Я думал, что функции выполняются только при явном вызове. Может кто-то объяснить, что здесь происходит и как это работает? Заранее спасибо за помощь!

привет! я тоже когда-то удивлялся такому поведению. дело в том, что ты используешь ключевое слово new перед function. это создает и сразу выполняет функцию-конструктор. чтобы избежать автоматического вызова, просто убери new:

this.голос = function() {
alert(‘гав’);
}

теперь метод голос будет вызываться только когда ты его явно вызовешь, например шарик.голос(). надеюсь, это помогло разобраться! удачи в изучении javascript, это классный язык)

Тут дело в использовании new перед function. Это создает и сразу выполняет анонимную функцию-конструктор. Чтобы метод не вызывался автоматически, достаточно убрать new:

this.голос = function() {
alert(‘гав’);
}

Теперь голос будет вызываться только явно: шарик.голос().

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