Все одно и то же.
Когда вы расширяете класс, используя Backbone.View.extend({})
, как вы можете видеть, вы не добавляете какое-либо дополнительное свойство или метод в свой класс. Вы передаете ему пустой хеш {}
в качестве аргумента. Итак, Backbone.View
и Backbone.View.extend({})
- это почти то же самое.
О присутствии new
ключевых слов перед этим, это просто стимулирует новый класс. Если вы не используете ключевое слово new
, вы просто говорите о классах, тогда как с ключевым словом new
вы говорите об объекте этого самого класса.
Parentesis не является обязательством. Это требуется только в том случае, если вы хотите передать аргументы своему конструктору, поэтому new Backbone.View()
и new Backbone.View;
- это то же самое, что и new Backbone.View()
и new Backbone.View.extend({})
по причинам, которые я написал ранее.
Об этом скрипки (http://jsfiddle.net/C2Z34/):
myView1
класс, который расширяет View
myView2
(с parentesis как в моей скрипке) является объектом класс расширенный Backbone.View
myView3
является объектом класса Backbone.View. Он не распространяется.
myView4
же, как myView3
'Backbone.View' и' Backbone.View.extend() 'are * different *. См. [This Fiddle] (http://jsfiddle.net/C2Z34/1/). – Randomblue
(не могу запустить примеры Fiddle, поэтому я использовал консоль Chrome) @gustavotkg по-прежнему прав. Консоль сообщает вам, что первые три разные. Однако 'Backbone.View' и' Backbone.View.extend() 'похожи. Используя 'new Backbone.View' и' new (Backbone.View.extend()), оба вызывают конструктор вида и возвращают похожие объекты, хотя 'Backbone.View.extend()' принимает объезд через возвращаемую им функцию [inherits , в строке 1096]. 'new Backbone.View.extend()', обратите внимание на отсутствующие скобки, это более или менее JSWTF. Я ожидаю, что это вызовет 'new (Backbone.View.extend()), и это не так. – Wieczo
@wieczo: Спасибо. Ваш комментарий о скобках очень полезен. Я был в замешательстве. – Randomblue