Я разработчик javascript среднего уровня, который пытается понять, как внутри работает магистральная библиотека, и буду очень признателен, если кто-нибудь поможет мне решить некоторые проблемы.
вот что я понимаю
базовое определение функции конструктора в Backbone
Backbone.Model = function(attributes, options) { }
затем они используют метод расширения общего назначения, чтобы добавить общие функции в прототип нашего конструктора.
_.extend(Backbone.Model.prototype, Backbone.Events, {...})
теперь, до этой части, я точно знаю, что происходит, и был бы рад создать новый объект, следуя коду
var user = new Backbone.Model()
и это та часть, которую я нахожу сложной
конечно, это не тот способ, которым мы создаем экземпляр объекта в Backbone, но мы используем метод расширения
var Users = Backbone.Model.extend({});
var user = new Users()
и в магистральном коде
Backbone.Model.extend = extend;
var extend = function(protoProps, classProps) {
var child = inherits(this, protoProps, classProps);
child.extend = this.extend;
return child;
};
var inherits = function(parent, protoProps, staticProps) {
var child;
if (protoProps && protoProps.hasOwnProperty('constructor')) {
child = protoProps.constructor;
} else {
child = function() {
return parent.apply(this, arguments);
};
}
_.extend(child, parent);
ctor.prototype = parent.prototype;
child.prototype = new ctor();
if (protoProps) _.extend(child.prototype, protoProps);
if (staticProps) _.extend(child, staticProps);
child.prototype.constructor = child;
child.__super__ = parent.prototype;
return child;
};
пожалуйста, объясните мне, что происходит внутри функции наследования и в чем преимущество метода расширения