只是尝试在某个地方使用 JS 继承,并且遇到了子类覆盖属性的问题。 我使用一个名为 options 的对象来具有可以覆盖的默认属性。就像这样:
class a {
options: {
property1: 1,
property2: 2
},
init: function (parameters, element) {
this.options = $.extend({}, this.options, parameters);
}
}
我这样做是因为我也使用插件创建...但这不是问题。问题是,当您覆盖也有选项参数的基类时,它会被覆盖,并且当您在基类中调用 _super 时,它不知道它用来做什么来执行它需要做的事情做。
例如,您有两个类:Person
和 Ninja
。在 Person
初始化后,他吃东西……他饿了。 Ninja
扩展了 Person
并且他需要读取命中列表。虽然是忍者,但作为人还是要吃饭的。所以你调用 this._super();但他似乎不再有任何食物了(这在选项中声明)。
这是一个 fiddle ,您可以在其中明白我的意思:http://jsfiddle.net/37Z8m/5/
我能想到的解决这个问题的方法是重新声明父类中的默认选项,以便它们仍然存在,或者向 J-Resig 的继承脚本添加异常,以仅添加到选项类而不覆盖它...只是在其他语言中,当您扩展时,它仍然可以访问它自己的属性。
John 的继承脚本首先覆盖该对象,然后让您调用 _super();我认为这是错误的......?
最佳答案
但是如果您想要覆盖父选项而不是合并怎么办?听起来你应该直接使用选项而不使用中间字典:
class a {
options: {
eat: 'burger',
drink: 'soda'
}
}
变成了
class a {
options_eat: 'burger',
options_drink: 'soda'
}
关于javascript - Resig的JS继承脚本...父类的属性被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7891184/