function собака() {
this.голос = new function() {
alert('гав');
}
}
let шарик = new собака();
Я новичок в JavaScript и столкнулся с интересным поведением. В коде выше я создаю объект собака
с методом голос
. Но когда я создаю экземпляр шарик
, функция голос
срабатывает автоматически, хотя я её не вызывал.
Почему так происходит? Я думал, что функции выполняются только при явном вызове. Может кто-то объяснить, что здесь происходит и как это работает? Заранее спасибо за помощь!
привет! я тоже когда-то удивлялся такому поведению. дело в том, что ты используешь ключевое слово new перед function. это создает и сразу выполняет функцию-конструктор. чтобы избежать автоматического вызова, просто убери new:
this.голос = function() {
alert(‘гав’);
}
теперь метод голос будет вызываться только когда ты его явно вызовешь, например шарик.голос(). надеюсь, это помогло разобраться! удачи в изучении javascript, это классный язык)
Тут дело в использовании new перед function. Это создает и сразу выполняет анонимную функцию-конструктор. Чтобы метод не вызывался автоматически, достаточно убрать new:
this.голос = function() {
alert(‘гав’);
}
Теперь голос будет вызываться только явно: шарик.голос().
Кстати, в современном JS лучше использовать стрелочные функции или методы класса для таких случаев. Так код будет чище и понятнее.