Разница между классом и объектом в Javascript - PullRequest
15 голосов
/ 10 августа 2010

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

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

и

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

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

var anotherView = new myView();

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

Ответы [ 3 ]

14 голосов
/ 10 августа 2010

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

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

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

2 голосов
/ 10 августа 2010

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

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

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

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

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

0 голосов
/ 25 февраля 2019

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

Это выражение функции без выполнения. А также var myView = function () { //something goes here return { a: x, b: y }(); Это выражение функции выполняется из-за круглых скобок «()» после функции, что приводит к возврату объекта.

Снова New ключевое слово используется для создания конструктора и не может быть применимо для Object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...