辞职's JS继承脚本.父类的属性被覆盖

Resig's JS Inheritance script... Parent class has properties overwritten

本文关键字:父类 属性 覆盖 脚本 继承 JS 辞职      更新时间:2023-09-26

只是试图在某个地方使用JS继承,并且遇到了子类覆盖属性的问题。我使用一个名为options的对象来拥有可以被覆盖的默认属性。So like So:

class a {
   options: {
       property1: 1,
       property2: 2
   },
   init: function (parameters, element) {
       this.options = $.extend({}, this.options, parameters);
   }
}

我这样做是因为我也使用插件创建…但这不是问题所在。问题是,当你重写基类时,它也有一个选项参数,然后它被覆盖,当你在基类中调用_super时,它不知道它曾经做过什么来做它需要做的事情。

例如,您有两个类:PersonNinja。初始化Person后,他吃…他饿了。Ninja扩展Person,他需要读取一个命中列表。虽然他是忍者,但他还是需要像人一样吃饭。调用this。_super();但他似乎没有任何食物了(这是在选项中声明的)。

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

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

John的继承脚本首先重写对象,然后让你调用_super();我认为这是错误的…?

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

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

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