У меня есть класс Ext JS, который я определил. В этом классе constructor
я нажимаю текстовое поле на массив своих элементов и добавляю к своей тестовой строке. И массив, и строка объявляются пустыми в определении класса. Однако, если вы попытаетесь создать несколько экземпляров класса, вы увидите, что массив items является общим для каждого экземпляра, но строка - нет.Нажатие элементов на массив в конструкторе Ext JS приводит к нескольким элементам
Это кажется странным, так как я ожидаю, что определение класса будет использоваться в качестве своего рода шаблона, поэтому каждый новый класс начнется с нуля. Похоже, это неверно, поэтому я понимаю, что это связано с примитивами против объектов, но я не совсем уверен, почему. Какое техническое объяснение Ext JS делает это? Разве this
в конструкторе ссылается на этот конкретный экземпляр, а не на фактическое определение класса?
Я не спрашиваю, как исправить проблему ... Я знаю, как это сделать (объявлять массивы и объекты внутри initComponent/constructor). Я спрашиваю, что это за техническое объяснение. Из того, что я собираю, это не так, как ведут себя классы ES6, поэтому я предполагаю, что это связано с дизайном системы класса Ext JS.
Адрес example.
Ext.application({
name : 'Fiddle',
launch : function() {
Ext.define('MyClass', {
extend: 'Ext.panel.Panel',
alias: 'widget.myClass',
items: [],
border: true,
myTestString: '',
constructor: function(config) {
this.items.push({
xtype: 'textfield',
fieldLabel: 'test'
});
this.myTestString += 'hi';
this.callParent(arguments);
}
});
var v = Ext.create('Ext.container.Viewport', {
defaults: {
xtype: 'myClass',
listeners: {
afterrender: function(panel) {
console.log(panel.myTestString);
}
}
},
items: [{
title: 'One'
}, {
title: 'Two'
}, {
title: 'Three'
}]
});
}
});