我创建了一个超类Control
和一个子类LED
。 Control
的初始化程序设置了几个属性,比如高度,宽度,那种stuf。但是,当我创建LED
的实例时 - 使用适当的数据来填充它应该继承的属性 - 在记录实例时不会显示继承的属性。
以下是两个构造函数:
var Control = Class.create({
initialize: function(control){
log('info','Beginning creation of control using following control object.');
log('log',control);
// Define self to prevent conflicts with frameworks
if(!self){ var self = this; }
this.type = null;
this.size = { w: control.w, h: control.h };
this.position = { x: control.x, y: control.y };
this.color = control.color;
this.name = control.name;
this.active = false;
}
});
var LED = Class.create(Control,{
initialize: function($super){
$super;
this.type = "led";
}
});
我创建了一个小型Heroku网站来演示:http://blazing-dusk-603.heroku.com/interfaces/16,如果你打开控制台,你会看到大量的日志,底部的那个是LED的实例,没有大小,位置,颜色,名称或活动属性。
这是我第一次使用prototypejs继承,所以也许我误解了一些东西,当然可以理解帮助;)
答案 0 :(得分:1)
如果你想调用超类方法,你可能应该这样做:
$super.call(this, this); // not exactly sure what "$super" is supposed to be
$super.initialize(this); // maybe?
(或类似的东西)。在任何情况下,只需像代码一样提及变量就没有效果。
编辑 - 根据Prototype文档,“$ super”是对父类函数的引用,因此如果要调用它,则必须传入“control”参数。我不知道那应该是什么,但你的基类“initialize()”显然希望它是非空的。
真的,它看起来好像你的子类“initialize()”并没有真正遵循父类的API模式:
var LED = Class.create(Control, {
initialize: function($super, control) {
$super.call(this, control);
似乎更接近你想要的东西。