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

Extend() с использованием подчеркивания против основной

Я знаю, что базовый блок несколько зависит от подчеркивания и jquery. Есть ли разница между двумя строками ниже?

app.notifications = _.extend({}, Backbone.Events);

И

app.notifications  = Backbone.Events.extend({});

Если они НЕ одинаковы, как разные?

4b9b3361

Ответ 1

Backbone.Events.extend не существует, поэтому я буду ссылаться только на Backbone.Model.

_.extend(target, mixin1, mixin2) собирается копировать свойства в целевой объект

Backbone.Model.extend будет subclass Backbone.Model в основном создает конструктор (функцию), прототип которого имеет ваши предоставленные свойства. Это позволит вам создавать экземпляры вашего нового класса

var Person = Backbone.Model.extend({name: 'yourName'});
var me = new Person();
alert(me.name);

а _.extend завершится с ошибкой

var Person = _.extend({name: 'yourName'}, Backbone.Model);
var me = new Person();  //error b/c Person is a regular object
alert(me.name);

Короче Backbone.Model.extend создает новый конструктор (функция), а _.extend изменяет существующий объект;

var modified = {};
alert(modified === _.extend(modified, Backbone.Model)); //true
alert(modified === Backbone.Model.extend(modified)); //false