0

BackboneJS のコードを調べて、実装を拡張することに興味があります。自分で作ろうとすると行き詰まります。私のコードは次のとおりです。

var extend = function(child) {
  var base = this;

  if(child) {
    for(var prop in child)  {
      base[prop] = child[prop];
    }
  }

  return base;
};

var Test = Mod.Test = function()  {
  this.data = {};
}

Test.prototype.set = function(key, value) {
  this.data[key] = value;
}

Test.prototype.get = function(key)  {
  return this.data[key];
}

Test.extend = extend;

このようにしようとすると、hello メソッドを Mod.Test にアタッチできません

var testObj = new Mod.Test.extend({
 hello : function() {
  console.log('hello');
 }
});

それはどのように可能ですか。backbonejs での実装方法。

4

1 に答える 1

2

Backbone の extends メソッドは、インスタンス プロパティと静的プロパティの 2 つのパラメータを受け入れます。最初のものは作成中のインスタンスにコピーされ、2 番目のものはインスタンスのプロトタイプに割り当てられます。通常は、new 演算子を使用せずに extends メソッドを呼び出す必要がありますが、この場合のコードの動作バージョンは次のとおりです。

var extend = function(child) {
  var base = this;

  if(child) {
    for(var prop in child)  {
      base[prop] = child[prop];
    }

    for(var prop in child)  {
      base.prototype[prop] = child[prop];
    }
  }



  return base;
};

var Test = Backbone.Model.Test = function()  {
  this.data = {};
}

Test.prototype.set = function(key, value) {
  this.data[key] = value;
}

Test.prototype.get = function(key)  {
  return this.data[key];
}

Test.extend = extend;

その後:

Test = Backbone.Model.Test.extend({
  hello : function() {
    console.log('hello');
  }
});
var testObj = new Test;
于 2013-03-06T19:28:49.413 に答える