Resig的JS继承脚本...父类具有覆盖的属性

时间:2011-10-25 14:52:15

标签: javascript jquery html oop inheritance

只是试图在某处使用JS继承,并且遇到了子类覆盖属性的问题。 我使用一个名为options的对象来获取可以覆盖的默认属性。所以这样:

class a {

   options: {
       property1: 1,
       property2: 2
   },

   init: function (parameters, element) {
       this.options = $.extend({}, this.options, parameters);
   }

}

我是这样做的,因为我也使用插件创建...但这不是问题。问题是当你覆盖同时具有options参数的基类时,它会被覆盖,当你在基类中调用_super时,它就不知道它已经用来做它需要做什么了做。

例如,您有两个类:PersonNinja。在初始化Person时,他吃了......他很饿。 Ninja扩展Person,他需要阅读一个命中列表。即使他是一个忍者,他仍然需要作为一个人吃饭。所以你调用this._super();但他似乎没有任何食物(在选项中宣布)。

这是一个小提琴,你可以看到我的意思:http://jsfiddle.net/37Z8m/5/

我能想到解决这个问题的方法是重新声明父类中的默认选项,使它们仍然存在,或者向J-Resig的继承脚本添加一个例外,只添加到选项类而不是覆盖它...只是在你扩展的其他语言中,它仍然可以访问它自己的属性。

John的继承脚本首先覆盖对象,然后让你调用_super();我觉得这是错的......?

1 个答案:

答案 0 :(得分:0)

但是如果你希望覆盖父选项而不是合并呢?听起来你应该直接使用选项而不使用中间字典:

class a {
     options: {
         eat: 'burger',
         drink: 'soda'
     }
}

变为

class a {
     options_eat: 'burger',
     options_drink: 'soda'
}