2014-08-28 57 views
0

我很想知道是否有一种获取调用函数的名称而不必使用arguments.callee.caller(因为这已被弃用)并命名我的函数。比方说,我有这样的代码:Ext JS:获取调用函数的名称

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函数来获取调用函数的名字?我可以很容易抓住的className与这一点。的$ className,但我敢肯定这是令人难以接受的......

回答

0

结束了使用arguments.callee.caller.$name。这不是理想的,但它目前完成了工作......当/如果它被弃用,我将不得不重新讨论这个问题。