Между чем различие
var myView = function () {
//something goes here
};
и
var myView = function () {
//something goes here
return {
a: x,
b: y
}();
Я думаю, что первый отрывок создает "динамический" класс, так, чтобы можно было сказать
var anotherView = new myView();
и второй отрывок подобен одиночному элементу "динамический" объект, но я не очень уверен.
Javascript использует прототипное наследование, поэтому не классов как таковых. Все есть объект; просто у некоторых объектов есть общий родительский объект, методы / переменные которого будут найдены при разрешении имен в цепочке прототипов.
Ваш первый фрагмент кода создает объект с именем myView
, тип которого является функцией. Ваш второй фрагмент определяет анонимный метод, который возвращает объект (с двумя свойствами, a
и b
), а затем немедленно вызывает этот метод, присваивая результат myView
. Итак, во втором случае myView
- это объект с двумя самоопределяемыми свойствами.
Возможно, вам будет полезно прочитать описание прототипного наследования в Javascript Дугласом Крокфордом, поскольку это звучит так, будто вы немного нечетко разбираетесь в деталях.
В javascript нет классов.
Как вы упомянули, ваш первый пример будет для многократно используемого объекта, тогда как ваш второй пример будет только для одноэлементного объекта.
Основное отличие состоит в том, что вы вызываете эту функцию сразу во втором примере, и она возвращает вам объект, тогда как вам нужно явно вызывать первую функцию каждый раз, используя что-то вроде a = new myView ( )
это (), который обеспечивает этот вызов.
Я использую ваш второй пример (известный как шаблон модуля Крокфорда) для задач, связанных с одной страницей, и первый пример для повторно используемых компонентов на этой странице (некоторые элементы генерируются много раз с помощью обработчиков и т. Д.)
Также читайте о Прототипное наследование, чтобы вы могли понять, как эффективно использовать первый пример для написания более производительного кода javascript.