【发布时间】:2014-08-14 02:20:49
【问题描述】:
通常在Coffeescript中,如果我想调用一个存在于父类中的函数,我只是在最后抛出一个对super的调用。例如
initialize: (options) ->
// do some stuff here
super options
我正在使用一个框架,该框架具有一些函数,如果它们被定义,则会被调用,例如 onShow 或 onClose。在许多类中,这些功能不存在,但可能会在以后的开发中添加。通常,我会定义一个扩展另一个类的类,并出于习惯在我的onShow 方法中调用super:
onShow: ->
// do things
super
这生成的 Javascript 格式为:
return ClassName.__super__.onShow.apply(this, arguments);
不幸的是,这假定onShow 存在于父类中,但它可能不存在。通常,我可以通过生成 Javascript 的 funcName?() 来解决可能存在的函数:
if (typeof funcName === "function") {
funcName();
}
但是super?() 没有按预期工作,生成了这个 Javascript:
return typeof (_base = ClassName.__super__.onClose.apply(this, arguments)) === "function" ? _base() : void 0;
当我期望时,改为:
return typeof (_base = ClassName.__super__.onClose) === "function" ? _base.apply(this, arguments) : void 0;
显然,我可以手动删除对super 的调用,但我想让我的子类在以后更改父类时自动继承父类行为。
Coffeescript 中是否有助记符来执行我在这里尝试的操作?
【问题讨论】: