如何在Mootools扩展类中调用任意父方法

劳伦佐斯

在Mootools中,我可以用来this.parent()在父类中调用当前的执行方法:

foo: function() {
    this.parent(); // Equals to super.foo() in Java
}

但是,如果我想调用在子类中重写的另一个父方法怎么办?

bar: function() {
    // Overriden bar() method
},

foo: function() {
    ??? // Equals to super.bar() in Java
}
迪米塔尔·克里斯托夫(Dimitar Christoff)

您仍然可以按照javascript进行操作

又名

Super.prototype.foo.apply(this, args);

所以在一个小例子中

    var Foo = new Class({
    name: 'Foo',
    foo: function(){
        console.log(this.name, '=>foo');
    },
    baz: function(){
        console.log('baz');
    }
});

var Bar = new Class({
    Extends: Foo,

    name: 'Bar',

    foo: function(){
        console.log(this.name, '=>foo own');
        this.parent();
    },

    bar: function(){
        console.log(this.name, '=>bar');
        // less DRY and knowledge, apply to my instance
        this.$constructor.parent.prototype.foo.call(this); 
        // without applying to my instance... as static:
        this.$constructor.parent.prototype.foo(); 

        Foo.prototype.foo.apply(this); // normal JS way
    }
});

var b = new Bar();

b.bar();

不是很好。不幸的是,它很烂。您可以将其设为混合,仅从上游原型调用任何方法,而不必依赖原型链...

http://jsfiddle.net/dimitar/oraa1mgb/1/

var Super = new Class({
    Super: function(method){
        var superMethod = this.$constructor.parent.prototype[method],
            args = Array.prototype.slice.call(arguments, 1);

        if (!superMethod){
            console.log('No ' + method + ' found or no parent proto');
            return this;
        }
        else  {
            return superMethod.apply(this, args);
        }
    }
});

通过Implements: [Super]然后this.Super('foo', arg1, arg2)return this[method](args)如果在父级上找不到它,则可以创建它

这可能无法扩展到多个扩展类,也无法知道您的意思是哪个父级-解析流程应该很自然。

同样,如果您扩展一个类并覆盖一个方法,但仍然需要其他方法的原始方法,则可能是在做错事的同时又可能违反了LSP。

我将进行重构以指示my.barvs之间的区别parent.bar,例如my.barClubvsmy.barparent.bar,具有易于理解和维护的语义。您的本地方法就知道是否存在等的barbarClub,而家长只在乎一个“正常” bar您可以通过子类中的条件来确定要调用的对象。

barClub也可以在本地本地进行this.bar(),这将通过超级电话进行。

照原样,可能很难遵循/理解/调试行为。善待自己的未来:)

玩得开心

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在父类方法中调用子类方法?

来自分类Dev

如何在同名的子类方法中调用父类方法?

来自分类Dev

java如何在实现父方法的同时扩展类

来自分类Dev

Mootools类:从事件处理程序中调用类方法

来自分类Dev

从类中调用父方法

来自分类Dev

如何在Objective-C中调用父类的静态方法

来自分类Dev

R Reference Class多重继承:如何在特定的父类中调用方法?

来自分类Dev

如何在C#的父类方法中调用子类的字段

来自分类Dev

如何在父类的函数中调用子类的函数

来自分类Dev

如何从两个父类中调用“重写”方法?

来自分类Dev

如何在python中调用类的方法?

来自分类Dev

如何在python中调用类方法

来自分类Dev

如何在返回的类中调用方法

来自分类Dev

如何在 Func() 中调用类方法

来自分类Dev

如何在父方法中调用子方法?

来自分类Dev

如何在多级继承中调用父级方法

来自分类Dev

如何在React中重写父类方法?

来自分类Dev

如何从类外部调用父方法?

来自分类Dev

从父类中调用父方法

来自分类Dev

无法在 JavaScript 中调用父类方法

来自分类Dev

如何在类方法调用内联中嵌套函数调用

来自分类Dev

如何在Python中从其他类调用类方法?

来自分类Dev

如何在类方法中调用不同的类实例?

来自分类Dev

如何防止在父类中调用PreviewKeyDown

来自分类Dev

D:如何在扩展类中覆盖不变方法?

来自分类Dev

如何在抽象类中实现扩展方法

来自分类Dev

父类的调用方法

来自分类Dev

如何在python中使用子类的方法调用第二个父类的方法?

来自分类Dev

我如何在扩展类构造函数中调用抽象类的构造函数

Related 相关文章

热门标签

归档