Ответ 1
Это механизм, который ExtJS использует для поддержки наследования классов в конструкторах. Вызов this.callParent(arguments)
в конструкторе вызывает конструктор ближайшего родительского класса, который расширяется.
Я заметил, что во многих программах, которые я недавно изменял, они всегда вызывают родительские аргументы текущего объекта. Я знаю, что это необходимо, но у вас нет четкого понимания того, почему это обычная практика. Любая мудрость там для разработчика младшего уровня... Я должен это знать.
Это механизм, который ExtJS использует для поддержки наследования классов в конструкторах. Вызов this.callParent(arguments)
в конструкторе вызывает конструктор ближайшего родительского класса, который расширяется.
Я не знаю, о какой версии этот вопрос. Но что касается моего кода, в Ext JS 5, callParent()
- вызывает метод "родительский" текущего метода. Это метод, ранее переопределенный деривацией или переопределением
Попробуйте этот код.
Ext.define('MyApp.test.LifecycleExample', {
extend: 'MyApp.test.TrialComponent',
initComponent: function() {
var me = this;
me.width = 200;
me.height = 100;
me.html = {
tag: 'div',
html: 'X',
style: {
'float': 'right',
'padding': '10px',
'background-color': '#e00',
'color': '#fff',
'font-weight': 'bold'
}
};
console.log("init is called before callParent()");
me.myOwnProperty = [1, 2, 3, 4];
me.callParent();
console.log('1. initComponent');
},
beforeRender: function() {
console.log('2. beforeRender');
this.callParent(arguments);
},
onRender: function() {
console.log('3. onRender');
this.callParent(arguments);
this.el.setStyle('background-color', '#ff0');
},
afterRender: function() {
console.log('4. afterRender');
this.callParent(arguments);
this.el.down('div').on('click', this.myCallback, this);
},
beforeDestroy: function() {
console.log('5. beforeDestroy');
this.callParent(arguments);
},
onDestroy: function() {
console.log('6. onDestroy');
delete this.myOwnProperty;
this.el.un('click', this.myCallback);
this.callParent(arguments);
},
myCallback: function() {
var me = this;
Ext.Msg.confirm('Confirmation', 'Are you sure you want to close this panel?', function(btn) {
if (btn === 'yes') {
me.destroy();
}
});
}
});
Ext.define('MyApp.test.TrialComponent', {
extend: 'Ext.Component',
constructor: function() {
console.log('parent const');
this.initComponent();
},
constructor: function(config) {
console.log('parent const config' + config);
this.initComponent();
}
});
Вывод в консоли браузера:
parent const config[object Object]
init is called before callParent()
1. initComponent
callParent (args) Вызвать "родительский" метод текущего метода. Это метод, ранее переопределенный деривацией или переопределением
Ссылка - это ext js api docs.
http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.Base-method-callParent
В соответствии с doco (спасибо javaCoder) http://docs.sencha.com/extjs/5.0/5.0.1-apidocs/#!/api/Ext.Base-static-method-callParent:
Call the "parent" method of the current method. That is the method previously overridden by derivation or by an override (see Ext.define).
И arguments
:
Parameters
args : Array/Arguments
The arguments, either an array or the arguments object from the current method, for example: this.callParent(arguments)
Хотя это говорит мне, что arguments
представляет объект аргумента для этого метода. Однако, смотря на инструменты разработчика, этот объект инкапсулирован в другой объект, который также включает в себя некоторую другую информацию, такую как вызываемый: