Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Mootools中获得此.祖父母()功能?_Javascript_Mootools - Fatal编程技术网

Javascript 如何在Mootools中获得此.祖父母()功能?

Javascript 如何在Mootools中获得此.祖父母()功能?,javascript,mootools,Javascript,Mootools,我在Mootools中构建了一个类,并对其进行了两次扩展,这样就有了祖父母、父母和孩子的关系: var SomeClass1 = new Class({ initialize: function() { // Code }, doSomething: function() { // Code } }); var SomeClass2 = new Class({ Extends: SomeClass1, initialize: function() {

我在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很理想,但我继承了代码,目前没有时间进行重构。

我手头没有mootools可供测试,但

你试过了吗

(this.parent()).parent(); 

?

这可能对你不起作用,但是。。。如果将
SomeClass1
添加为mixin,并从
SomeClass3
中删除
doSomething
的本地定义,则对实例调用方法
doSomething
将调用
SomeClass1.doSomething()直接

如果某个类3上的
doSomething
需要运行本地/不同的代码,那么这可能是不实际的,但是您可以解决这个问题

必须有一种方法可以从第n级到达继承链的根,但我不能帮你。你应该去mootools的邮件列表,希望核心团队中有人能回答(比如ryan florence、aaron newton、christoph pojer等)。另一个好的来源是irc.freenode.net上的mootools irc频道

祝你好运,请更新你的发现,因为你永远不知道什么时候可能需要这个

从irc更新:

SomeClass1.prototype.doSomething.apply(这个[,…])

没有.parent()那么干净,但是Moo没有给你祖父母:)

此外,mixin还获得了各种各样的赞誉:

d_-mitar:我经常发现,如果我试图这样做,那么让2类或3类成为混音可能更有意义


但是是的,Akaidoot's应该有用

你能在祖父母课上说一下吗

SomeClass1.doSomething.apply(this,arguments);
甚至可能:

SomeClass1.prototype.doSomething.apply(this, arguments);
我不是100%确定MooTools类是如何工作的,但其中一个建议应该是可行的


另外,如果您在SomeClass2的
doSomething()
中拥有不希望为SomeClass3继承的功能,为什么SomeClass2是父类?您应该能够使另一个类成为父类,该类包含SomeClass2和SomeClass3所需的功能,然后允许每个类以自己的方式重写
doSomething()
方法。

如前所述,我打赌在这里使用mixin更有意义,但现在开始吧


这仍然会导致父方法运行。感谢mixin建议。这对我来说是可行的,但是,我正在处理大量的现有代码,这些代码还有一些不尽如人意的地方,重构需要的时间比我现在愿意花的时间还要多。如果我找到一个解决方案,我一定会用它更新这个线程。酷,我在irc上问过,得到了一些想法,回答更新了
var GrandParent = new Class({
    initialize: function(){
        console.log('init:GrandParent');
    },
    talk: function(){
        console.log('talk:GrandParent');
    }
});

var Parent = new Class({
    Extends: GrandParent,
    initialize: function(){
        this.parent();
        console.log('init:Parent');
    },
    talk: function(){
        console.log('talk:Parent');
    }
});

var Child = new Class({
    Extends: Parent,
    initialize: function(){
        this.parent();
        console.log('init:Child');
    },
    talk: function(){
        GrandParent.prototype.talk.apply(this);
        console.log('talk:Child');
    }
});