Ext JS:获取调用函数的名称

时间:2014-08-28 23:10:18

标签: javascript extjs extjs4 extjs4.2

我很想知道是否有Ext方式获取调用函数的名称而无需使用 arguments.callee.caller (因为&# 39;已被弃用)并命名我的功能。我们说我有这段代码:

Ext.Loader.setConfig({
  enabled: true
});

Ext.define('Mixin', {
  logWarning: function logWarning() {
    console.log('warning: ' + this.$className + '::' + arguments.callee.toString());  // displays function logWarning() ...
    console.log('warning: '+ this.$className + '::' + arguments.callee.caller.toString());  // displays functions() ...
  }
});

Ext.define('My.Panel', {
  extend: 'Ext.panel.Panel',
  mixins: ['Mixin']
});

Ext.application({
  name: 'Test',
  launch: function() {
    Ext.define('MyPanel', {
      extend: 'My.Panel',
      width: 200,
      height: 300,
      initComponent: function() {
        this.callParent();
        this.logWarning();
      }
    });
    Ext.create('MyPanel', {
      renderTo: Ext.getBody()
    });
  }
});

在我的 logWarning 函数中,第一个console.log字符串显示函数名称,因为我命名了该函数。但是,在大多数Ext应用程序中,这些功能仍然是匿名的,因为我没有必要,因为我使用的是像 this.logWarning 这样的范围,它没有意义在我的代码中保持相同的两个名字。

我想知道的是,有没有办法使用一些我不知道的Ext函数来获取调用函数的名称?我可以轻松地使用 this。$ className 来获取className,但我确信这不赞成......

1 个答案:

答案 0 :(得分:0)

使用arguments.callee.caller.$name结束。它并不理想,但它目前已完成工作......当它被弃用时,我将不得不重新审视这个问题。