2010-08-10 3 views
13

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

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

и

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

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

var anotherView = new myView(); 

и второй фрагмент подобен однотонному «динамическому» объекту, но я не очень уверен.

ответ

11

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

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

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

+0

Я знаю, что в JS нет классов, и я использовал термин «класс» в свободном смысле - моя ошибка! Однако, сказав это, спасибо за объяснение. – JamieJag

2

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

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

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

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

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

+0

ECMA 2015 Введен класс в js –

Смежные вопросы