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