@rimlin

Зачем нужна двойная скобка у 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();
            }
        }
    }
}
  • Вопрос задан
  • 2530 просмотров
Решения вопроса 2
kirill89
@kirill89
В первом случае this.method будет результатом выполнения функции:
{
  init: function () {
    alert();
  }
}


А во втором - самой функцией.
Ответ написан
Комментировать
bay73
@bay73
Во втором случае method - это функция и если хочется ее выполнить, то нужно нарисовать скобки. Например так: newclass.method().init();

А в первом случае method не функция, а уже результат ее выполнения (то есть объект с одним методом init)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
rdifb0
@rdifb0
Программист, реалист
Посмотрите в консоль, там будет подсказка.
ответ

В первом случае функция сразу выполнится и в this.method попадет объект. Во втором попадет функция, которую сперва нужно вызвать jsfiddle.net/G3ybH/3
Ответ написан
Комментировать
4ikist
@4ikist
В первом случае инкапсуляция, во втором нет, во втором надо принудительно вызывать init();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы