【问题标题】:Ext JS: Get calling function's nameExt JS:获取调用函数的名称
【发布时间】:2014-08-28 23:10:17
【问题描述】:

我很想知道是否有一种 Ext 方法可以获取调用函数的名称,而无需使用 arguments.callee.caller(因为它已被弃用)并命名我的函数。假设我有这个代码:

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 轻松获取类名,但我敢肯定这是不受欢迎的......

【问题讨论】:

    标签: javascript extjs extjs4 extjs4.2


    【解决方案1】:

    感谢Sencha Forums 的支持,我最终使用了arguments.callee.caller.$name。这并不理想,但它目前可以完成工作......当/如果它被弃用,我将不得不重新审视这个问题。

    编辑

    这是很久以前写的,从那以后我就不再使用这个属性了。相反,我抛出一个错误并解析堆栈跟踪以获取该方法,因为原始答案没有做我需要的。

    【讨论】:

    • 请务必以某种方式credit skirtle 提供您在此处提供的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多