我在我正在处理的项目中遇到了 Ext.namespace()
。
我查看了 Sencha's website 并且解释不是很有帮助。
他们是这样说的:
Creates namespaces to be used for scoping variables and classes so that they are not global. Specifying the last node of a namespace implicitly creates all other nodes.
Ext.namespace('Company', 'Company.data');
他们还提到 Ext.ns('Company.data')
更可取。
如果这个问题看起来简单或愚蠢,我深表歉意,但我真的很想完全理解这个概念。提前致谢
这是我不太清楚的:
- 如果我的 JS 页面顶部有
Ext.namespace('Company', 'Company.data')
,这是否意味着它包含所有其他函数名称和变量(如全局范围)? Ext.namespace('Company', 'Company.data')
中的“Company”和“Company.data”究竟代表什么?- 为什么新约定
Ext.ns('Company.data')
没有像Ext.namespace
中那样的“Company”? - 这是什么意思
指定命名空间的最后一个节点隐式创建所有其他节点
? - 什么时候应该使用这个想法?
最佳答案
首先,这也是 Ext.ns('Company.data')
大致等效的:
if (!Company) var Company = {};
if (!Company.Data) Company.Data = {};
基本上,它只是定义深层嵌套结构的快捷方式
的对象。如果您的项目以这种方式构建,这将很有用;我见过
具有 Java 后端的项目复制了
com.company.app.data.package
JavaScript 中的包名称,其中
Ext.ns
是一个不错的快捷方式。
逐点解决您的问题:
- If I have
Ext.namespace('Company', 'Company.data')
at the top of my JS page, does this mean that it carries all the other function name and variables (like a global scope)?
没有。您必须添加到 Company.Data
,例如 Company.Data.newVal = 5;
。
- What exactly 'Company' and 'Company.data' stand for in
Ext.namespace('Company', 'Company.data')
?
它们是您根据项目惯例选择的名称。
- Why new convention
Ext.ns('Company.data')
does not have 'Company' like inExt.namespace
?
因为隐含了“公司”。也就是说,Ext.ns('公司',
'Company.data')
就像:
if (!Company) var Company = {};
if (!Company) var Company = {};
if (!Company.Data) Company.Data = {};
这更容易理解为什么第一个“公司”是多余的。
What does this mean
Specifying the last node of a namespace implicitly creates all other nodes
?When exactly this idea should be used?
这两个我都回答过了。
关于javascript - 什么是 Ext.namespace,我们应该如何使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152188/