我在Mootools中构建了一个类并将其扩展了两次,这样就有了祖父母,父母和孩子的关系:
var SomeClass1 = new Class({
initialize: function() {
// Code
},
doSomething: function() {
// Code
}
});
var SomeClass2 = new Class({
Extends: SomeClass1,
initialize: function() {
this.parent();
},
doSomething: function() {
this.parent();
// Some code I don't want to run from Class3
}
});
var SomeClass3 = new Class({
Extends: SomeClass2,
initialize: function() {
this.parent();
},
doSomething: function() {
this.grandParent();
}
});
从Class3开始,我需要从Class1(祖父母)调用doSomething()方法,而不执行父类Class2#doSomething()中的任何代码.
我需要的是一个grandParent()方法来补充Mootools的parent(),但它似乎不存在.
在Mootools或纯JavaScript中实现这一目标的最佳方法是什么?谢谢.
更新:
我应该提到:我意识到糟糕的设计让我首先要问这个问题. mixin是理想的,但我继承了代码,目前没有时间用于重构.
解决方法:
这可能对你不起作用但是…如果你将SomeClass1作为mixin添加并从SomeClass3中删除doSomething的本地定义,那么在实例上调用doSomething方法将调用SomeClass1.doSomething();直接.
如果someClass3上的doSomething需要运行本地/不同的代码,但是你可以解决它,这可能不实用.
http://www.jsfiddle.net/29MGa/1/
必须有一种方法从第n级到达继承链的根,但我无法帮助你.你应该去mootools邮件列表并发布这个帖子,希望核心团队的人能够回答(比如ryan florence,aaron newton,christoph pojer等).另一个好消息来源是irc.freenode.net上的mootools irc频道#mootools.
祝你好运,请用你的发现更新这个,因为你不知道什么时候可能需要这个.
从irc更新:
< akaIDIOT> SomeClass1.prototype.doSomething.apply(this [,…]);
< akaIDIOT>不像.parent()那么干净,但Moo不会给你一个祖父母:)
mixin得到各种各样的赞许:
< rpflo> d_mitar:我经常发现,如果我试图这样做,那么第2或第3类可能更适合作为混音
< rpflo>但是,akaIDIOT应该可行
标签:javascript,mootools 来源: https://codeday.me/bug/20190701/1342567.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。