Подтвердить что ты не робот

Разница между классом и объектом в Javascript

Какая разница между

var myView = function () {
//something goes here
};

и

var myView = function () {
//something goes here
    return {
        a: x,
        b: y
}();

Я думаю, что первый фрагмент создает "динамический" класс, так что вы можете сказать

var anotherView = new myView();

а второй фрагмент похож на однострочный "динамический" объект, но я не уверен.

4b9b3361

Ответ 1

Javascript использует прототипное наследование, поэтому классов нет. Все это объект; просто некоторые объекты имеют общий родительский объект, чьи методы/переменные будут найдены, когда разрешение имен будет искать цепочку прототипов.

Ваш первый фрагмент кода создает объект с именем myView, тип которого является функцией. Второй фрагмент определяет анонимный метод, который возвращает объект (с двумя свойствами, a и b), а затем немедленно вызывает этот метод, присваивая результат myView. Таким образом, в этом втором случае myView - объект с двумя самоопределяемыми свойствами.

Это может помочь вам прочитать Douglas Crockford описание в Javascript, так как кажется, что вы немного нечеткие по деталям.

Ответ 2

В javascript нет классов.

Как вы уже упоминали, ваш первый пример будет для повторно используемого объекта, тогда как ваш второй пример - только для одного объекта.

Основное различие заключается в том, что вы вызываете эту функцию сразу во втором примере, и она возвращает вам объект, тогда как вы должны явно вызывать первую функцию каждый раз, используя что-то вроде a=new myView() it(), которое обеспечивая этот вызов.

Я использую ваш второй пример (известный как шаблон модуля crockford) для одной задачи, связанной с страницами, и первый пример для повторно используемых компонентов на этой странице (некоторый элемент многократно генерируется обработчиками и т.д.)

Также читайте о protoypal наследовании, чтобы вы могли понять, как эффективно использовать первый пример для написания кода javascript, который лучше всего работает.