Стандартных средств для таких случаев нет, поскольку они весьма редки. Я бы использовал простые флаги:
Ext.define('Arc', {
config: {
height: 0,
radius: 0
},
applyHeight: function(newHeight) {
var radius = <считаем радиус>;
// Аксессоры конфигов вызываются в контексте объекта
if (!this.disableHeightCalc) {
this.disableRadiusCalc = true;
this.setRadius(radius);
this.disableRadiusCalc = false;
};
return newHeight;
},
applyRadius: function(newRadius) {
var height = <считаем высоту>;
if (!this.disableRadiusCalc) {
this.disableHeightCalc = true;
this.setHeight(height);
this.disableHeightCalc = false;
};
return newRadius;
},
constructor: function(cfg) {
// Мы доверяем входным конфигам, их не надо пересчитывать
this.disableHeightCalc = this.disableRadiusCalc = true;
this.initConfig(cfg);
this.disableHeightCalc = this.disableRadiusCalc = false;
}
});
Что касается префикса для конфигурационных свойств, то насколько я понимаю, это была такая (тщетная) попытка удержать пользователей от изменения конфигов напрямую, в обход аксессоров. Security by obscurity конечно же не работает, но префиксы оставили как есть для пущей совместимости с Sencha Touch, откуда была притащена система конфигов.
Для большинства классов Ext JS (Classic toolkit в 6) префиксы конфигурационных свойств выключены.