Какая разница между инициализацией и конструктором на базовой модели

Какая разница между инициализацией и конструктором на базовой модели.

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

var ParentModel = Backbone.Model.extend({
  initialize : function() {
    // code here
  },
});


var Model = ParentModel.extend({
  constructor : function (options) {
    Backbone.Model.prototype.constructor.call(this, options);
    // code here
   },

Ответ 1

constructor выполняется до того, как Backbone настроит структуру. initialize вызывается внутри структуры constructor. Поэтому в основном, если вам нужно увеличить что-либо до того, как Backbone настроит структуру, используйте constructor, если вам нужно увеличить что-либо после того, как Backbone настроит использование структуры initialize.

(из Обсуждение Github по теме)

Ответ 2

constructor - это функция, которую Backbone использует для настройки: создание моделей, настройка событий и выполнение всех других настроек. Будьте очень осторожны, чтобы переопределить это, потому что если вы предотвратите запуск кода Backbone, переопределив или затеняя метод, вы получите странные ошибки, которые трудно отлаживать.

initialize, с другой стороны, является функцией, которую Backbone вызывает на своих объектах, когда она закончила с ее внутренней сантехникой. Если вы не делаете ничего, что специально предназначено для вмешательства в нормальную функциональность Backbone, просто используйте initialize.

Если вы используете CoffeeScript, возможно, более интуитивно использовать constructor. (Это для меня). Просто убедитесь, что вы всегда вызываете super.