Что такое Ext.namespace, как их использовать?

Я встретил Ext.namespace() в проекте, над которым я работаю.
Я смотрел сайт Sencha, и объяснение было не очень полезно.

Вот что они говорят:

Создает пространства имен, которые будут использоваться для переменных переменных и классов, поэтому что они не являются глобальными. Указание последнего node пространства имен неявно создает все остальные узлы.

Ext.namespace('Company', 'Company.data');

Они также отмечают, что Ext.ns('Company.data') является предпочтительным.

Прошу прощения, если этот вопрос кажется простым или немым, но я действительно хочу полностью понять эту концепцию. Спасибо заранее

Это то, что мне не очень понятно:

  • Если у меня есть Ext.namespace('Company', 'Company.data') в верхней части моей страницы JS, означает ли это, что оно содержит все другое имя и переменные функции (например, глобальную область)?
  • Что означает "Company" и "Company.data" в Ext.namespace('Company', 'Company.data')?
  • Почему в новом соглашении Ext.ns('Company.data') нет "Company", как в Ext.namespace?
  • Что это значит Specifying the last node of a namespace implicitly creates all other nodes?
  • Когда нужно использовать эту идею?

Ответ 1

Во-первых, это то, что Ext.ns('Company.data') тоже примерно эквивалентно:

if (!Company) var Company = {};
if (!Company.Data) Company.Data = {};

В принципе, это просто ярлык для определения глубоко вложенных структур объектов. Это полезно, если ваши структуры проекта таким образом; я видел проекты с бэкэдом Java, которые дублируют com.company.app.data.package имена пакетов в JavaScript, для которых Ext.ns - хороший ярлык.


Решение вопросов по пунктам:

  • Если у меня есть Ext.namespace('Company', 'Company.data') в верхней части моей JS-страницы, означает ли это, что оно несет все другое имя и переменные функции (например, глобальную область)?

Нет. Вы должны добавить к Company.Data, например Company.Data.newVal = 5;.

  • Что означает "Company" и "Company.data" в Ext.namespace('Company', 'Company.data')?

Это имена, выбранные вами, следуя условиям вашего проекта.

  • Почему в новом соглашении Ext.ns('Company.data') нет "Company", как в Ext.namespace?

Потому что подразумевается "Компания". То есть, Ext.ns('Company', 'Company.data') выглядит следующим образом:

if (!Company) var Company = {};
if (!Company) var Company = {};
if (!Company.Data) Company.Data = {};

Это облегчает понимание того, почему первая "компания" является избыточной.

  • Что это значит Specifying the last node of a namespace implicitly creates all other nodes?

  • Когда нужно использовать эту идею?

Я ответил на эти два вопроса.

Ответ 2

Ext.namespace действительно полезно, только если вы хотите определить свои собственные классы, не используя Ext.define.

В приведенном ниже примере требуется, чтобы пространство имен создавалось раньше времени:

Company.data.Form = Ext.extend(...); //this is the old way of defining classes

Стандартный способ создания классов ExtJS:

Ext.define('Comany.data.Form', {...});

Этот метод автоматически создает пространства имен.