只是试图在某处使用JS继承,并且遇到了子类覆盖属性的问题。 我使用一个名为options的对象来获取可以覆盖的默认属性。所以这样:
class a {
options: {
property1: 1,
property2: 2
},
init: function (parameters, element) {
this.options = $.extend({}, this.options, parameters);
}
}
我是这样做的,因为我也使用插件创建...但这不是问题。问题是当你覆盖同时具有options参数的基类时,它会被覆盖,当你在基类中调用_super时,它就不知道它已经用来做它需要做什么了做。
例如,您有两个类:Person
和Ninja
。在初始化Person
时,他吃了......他很饿。 Ninja
扩展Person
,他需要阅读一个命中列表。即使他是一个忍者,他仍然需要作为一个人吃饭。所以你调用this._super();但他似乎没有任何食物(在选项中宣布)。
这是一个小提琴,你可以看到我的意思:http://jsfiddle.net/37Z8m/5/
我能想到解决这个问题的方法是重新声明父类中的默认选项,使它们仍然存在,或者向J-Resig的继承脚本添加一个例外,只添加到选项类而不是覆盖它...只是在你扩展的其他语言中,它仍然可以访问它自己的属性。
John的继承脚本首先覆盖对象,然后让你调用_super();我觉得这是错的......?
答案 0 :(得分:0)
但是如果你希望覆盖父选项而不是合并呢?听起来你应该直接使用选项而不使用中间字典:
class a {
options: {
eat: 'burger',
drink: 'soda'
}
}
变为
class a {
options_eat: 'burger',
options_drink: 'soda'
}