1

バックボーンのソースを読んでいるときに、オブジェクト指向が気になっていました。 http://backbonejs.org/docs/backbone.html (「this.parse(attributes);」を検索)

  Backbone.Model = function(attributes, options) {
var defaults;
attributes || (attributes = {});
console.log('attributes : ', attributes);
if (options && options.parse) {
  //LOOK HERE
  attributes = this.parse(attributes);
}
if (defaults = getValue(this, 'defaults')) {
  attributes = _.extend({}, defaults, attributes);
}
if (options && options.collection) this.collection = options.collection;
this.attributes = {};
this._escapedAttributes = {};
this.cid = _.uniqueId('c');
if (!this.set(attributes, {silent: true})) {
  throw new Error("Can't create an invalid model");
}
delete this._changed;
this._previousAttributes = _.clone(this.attributes);
this.initialize.apply(this, arguments);

};

プロトタイプで parse を使用できるようになるのはなぜですか? メソッドは後で _.extend(Backbone.Model.prototype, Backbone.Events, {

4

2 に答える 2

2

Backbone.Modelメソッドは後でソース コード内でプロトタイプに追加されますが、コンストラクター関数から が実際に作成されたときに (残りのプロトタイプと共に) 引き続き使用できます。

于 2012-12-11T17:34:23.480 に答える
1

関数に表示されているコードは、誰かが実行しているときに実行されます

new Backbone.Model

その時までに、Backbone.Model.prototypeも定義されます。したがって、プロパティ ルックアップはparseメソッド onを見つけますthis.constructor.prototype(thisの作成されたばかりのインスタンスを指しますBackbone.Model)。

于 2012-12-11T17:34:12.097 に答える