来自mixins的prototype.js实例属性

时间:2014-09-16 19:36:06

标签: javascript inheritance prototypejs prototype instance

我正在寻找一种使用多重继承在javascript中创建对象的方法,这样就可以在原型上获得方法,并在实例上定义相关属性,所有这些都在同一个类中定义。这是我能用prototype.js获得的:

var MyBaseClass = Object.create({
  initialize: function(){
    this.id = ID_Generator.getNextID();
  }
});

var HasElementsMixin = {
  addElement: function(){...},
  removeElement: function(){...}
}

var Page = Class.create(MyBaseClass, HasElementsMixin, {
  initialize: function($super){
    $super();
    this.elements = [];
  },
  render: function(){...}
});

我希望在mixin中将elements数组与相应的方法一起声明,但不能在Page的实例之间共享。我尝试将HasElementsMixin编入另一个基类,但它不起作用。我想避免做MyBaseClass - > HasElements - >页面

是否可以使用prototype.js,或者我应该使用其他库或本机解决方案?

1 个答案:

答案 0 :(得分:1)

你也可以给你的mixin一个“构造函数”。需要从实现mixin的每个类调用它,就像你需要在子类中调用$super一样:

var HasElementsMixin = {
  initializeElements: function() {
    this.elements = [];
  },
  addElement: function(){…},
  removeElement: function(){…}
};

var Page = Class.create(MyBaseClass, HasElementsMixin, {
  initialize: function($super){
    $super();
    this.initializeElements();
  },
  render: function(){…}
});