在类定义中使用后无法覆盖混合行为

问题描述 投票:0回答:1

我需要重写第3方库中由mixin添加的某些成员函数。问题是:mixin立即用于多个第三方类定义中,并且在定义mixin的同一脚本文件中使用。而且我只能在此脚本之前或之后插入自定义代码,而不能在两者之间插入自定义代码。如果之后再调用override,则已经定义的类将无法在调用链中获得我的功能。

// library script BEGIN
Ext.define('Foo.bar.Base', {
});


Ext.define('Foo.bar.Util', {
  newmember: function() {
    console.log('newmember');
  }
});


Ext.define('Foo.bar.Derived', {
   extend: 'Foo.bar.Base',

   mixins: {
       fooutil: 'Foo.bar.Util'
   }
});

// library script END

Foo.bar.Util.override({
   newmember: function () {
       console.log('newmember2');
       this.callParent();
   }
});


var obj = new Foo.bar.Derived();

obj.newmember();

实际输出:

newmember

所需的输出:

newmember2
newmember
javascript extjs mixins
1个回答
0
投票

在使用mixin定义类之前重写。可以在定义时使用override作为属性来完成:


Ext.define('Foo.bar.UtilOverride',{
   override: 'Foo.bar.Util',
   newmember: function () {
       console.log('newmember2');
       this.callParent();
   }
});

// library script BEGIN
Ext.define('Foo.bar.Base', {
});


Ext.define('Foo.bar.Util', {
  newmember: function() {
    console.log('newmember');
  }
});


Ext.define('Foo.bar.Derived', {
   extend: 'Foo.bar.Base',

   mixins: {
       fooutil: 'Foo.bar.Util'
   }
});

// library script END



var obj = new Foo.bar.Derived();

obj.newmember();
© www.soinside.com 2019 - 2024. All rights reserved.