Различие между классом и объектом в JavaScript

Между чем различие

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

и

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

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

var anotherView = new myView();

и второй отрывок подобен одиночному элементу "динамический" объект, но я не очень уверен.

16
задан JamieJag 10 August 2010 в 15:44
поделиться

2 ответа

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

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

Возможно, вам будет полезно прочитать описание прототипного наследования в Javascript Дугласом Крокфордом, поскольку это звучит так, будто вы немного нечетко разбираетесь в деталях.

15
ответ дан 30 November 2019 в 22:37
поделиться

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

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

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

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

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

2
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

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