объясните магистральный объект и шаблон создания класса

Я разработчик 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;
};

пожалуйста, объясните мне, что происходит внутри функции наследования и в чем преимущество метода расширения

7
задан nitesh sharma 16 August 2012 в 13:22
поделиться