Java 类具有用于操作这些属性的属性和方法。ExtJS 类具有属性、方法和configOptions
. 从概念上讲,和 属性有什么
区别?configOptions
为什么我们两者都需要?
1 回答
据我了解……</h2>
configs - 在定义类的行为的构造函数中传递,配置不应在运行时更改,因为它不会有任何影响,假设您需要为面板指定标题,那么您可以添加一个配置{ title : 'some title' }
,例如将被面板用于在渲染时设置面板的标题,但之后,即使您尝试更改标题,也无法通过简单地更改该配置选项来更改属性。
properties - 用于存储对该类有用的信息,这通常不通过构造函数传递,但应该具有 getter 和 setter 方法,您可以在运行时更改属性(如果定义了 setter 方法)并且类对象应该检测到这一点更改,也可以有只读属性,这些属性也由类对象修改,但我们不应该全部更改。
configs - 在定义类的行为的构造函数中传递,配置不应在运行时更改,因为它不会有任何影响,假设您需要为面板指定标题,那么您可以添加一个配置{ title : 'some title' }
,例如将被面板用于在渲染时设置面板的标题,但之后,即使您尝试更改标题,也无法通过简单地更改该配置选项来更改属性。
properties - 用于存储对该类有用的信息,这通常不通过构造函数传递,但应该具有 getter 和 setter 方法,您可以在运行时更改属性(如果定义了 setter 方法)并且类对象应该检测到这一点更改,也可以有只读属性,这些属性也由类对象修改,但我们不应该全部更改。
更多信息
Sencha:属性与配置,在 Ext 4 文档中
我对这个问题的回答有点简单化和理想化。恐怕试图给出一个涵盖所有细节的完整答案更有可能增加混乱而不是澄清情况。
配置选项用于在创建对象时对其进行配置。在实例化之后尝试将它们设置为对象的属性通常不会有任何效果。
Ext.create('Ext.panel.Panel', {
// config options go here
});
一个对象将有很多属性,但只有“属性”部分中列出的那些才应该被视为公共属性。虽然没有什么可以阻止您访问私有属性,但您只能将其作为最后的手段,尽量使用记录在案的方法来操作它们。
// rendered is a public property used to indicate whether the panel has been rendered
if (panel.rendered) {
// could just do panel.el but that isn't a public property, so use getEl instead
var el = panel.getEl();
...
}
线条变得模糊的一个原因是对象通常像这样将它们的配置复制到自己身上:
Ext.apply(this, config);
这导致所有配置选项成为私有属性,至少在最初是这样。然后,内部类可以适当地操作这些属性,但从外部访问这些属性是违反封装的,应该避免。