2014-08-28 2 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. Это не идеально, но в настоящее время он выполняет свою работу ... когда/если он устарел, мне придется пересмотреть эту проблему.

Смежные вопросы