Jaison Justus
Jaison Justus

Reputation: 2793

implementing extend method in javascript

By looking through the code of BackboneJS, i am interested about extend the implemented. by when i try to make it myself i am stuck. my code is the following.

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;

when i try like this i am not able to attach hello method to Mod.Test

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

How is it possible. how its implemented in backbonejs.

Upvotes: 0

Views: 1919

Answers (1)

snedkov
snedkov

Reputation: 309

Backbone's extend method accepts two parameters - instance properties and static properties. The first ones are copied to the instance being created, the second are assigned to the instance's prototype. Usually you should invoke the extend method without the new operator but in this case here is a working version of your code:

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;

and then:

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

Upvotes: 2

Related Questions