Зачем нужна двойная скобка у function expression? Подскажите, почему такой код выполнить alert (Jsfiddle):var newclass = new Classname();
newclass.method.init();
function Classname () {
this.method = function () {
return {
init: function () {
alert();
}
}
}()
}
А этот код не выполнить alert (Jsfiddle):var newclass = new Classname();
newclass.method.init();
function Classname () {
this.method = function () {
return {
init: function () {
alert();
}
}
}
}

21 Авг 2019 в 07:09
196 +1
0
Ответы
1

Когда вы используете двойные скобки вокруг анонимной функции возвращающей объект, это означает, что вы сразу вызываете эту функцию и результат этого вызова будет присвоен переменной this.method. В примере с двойными скобками код сработает, потому что функция сразу вызывается и объект с методом init будет возвращен.

В примере без двойных скобок, функция не вызывается сразу, а только присваивается свойству method. Поэтому когда вы пытаетесь вызвать newclass.method.init(), method на самом деле является функцией, а не объектом с методом init, поэтому будет ошибка.

Если вы хотите, чтобы код без двойных скобок работал так же как и с двойными скобками, вы можете вызвать this.method() сразу после определения как функции:

function Classname () {
this.method = function () {
return {
init: function () {
alert();
}
}
}();
}

Таким образом, код должен выполнить alert.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир