Вопрос

Таким образом, в расширениях Firefox это поощряется, чтобы объекты вашего расширения живут в субъектах, таких как com.contoso.myextension. Таким образом, вы не помещаете никаких объектов в глобальное пространство имен, а наращивание обычно остаются подальше от волос друг друга. (По крайней мере, в общем окне Browser.xul)

Но из того, что я понял Модули кода JavaScript (JSMS), в том, что, хотя сам модуль работает в отдельном пространстве имен, символы, которые он экспортирует, окажутся в глобальном пространстве имен, любого кода импортируют его. Кроме того, невозможно, чтобы расширение было «красивым» и только пытаться создать субъекты; Эти экспортируемые символы просто ударят любые глобальные переменные, которые уже существовали. Также вы не можете экспортировать символ, такой как com.contoso.myextension. Это всего лишь простая глобальная переменная.

Так что же является протоколом для хорошей игры при использовании JSMS? Просто сделайте действительно длинные имена переменных и надеетесь, что они не будут столкнуться?

Это было полезно?

Решение

Во -первых, я не видел жесткого истинного стандартный для того, как справиться с этим. Но мы определенно можем сделать намного лучше, чем просто имена длинных переменных ...

Вы правы в отношении модулей кода JavaScript, живущих в отдельном Пространство имен (так сказать), однако, когда вы импортируете их, вам не нужно импортировать их в глобальное пространство имен. Если вы посмотрите на Components.utils.import Документация, вы видите, что вы можете импортировать в определенную область. То есть, Вам вообще не нужно загрязнять глобальное пространство имен вообще.

Вы можете собрать свои модули в myExtension Пространство имен.

var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);

И завершение этого внутри функции самостоятельного выполнения не позволяет каким-либо переменным протекать в глобальное пространство имен, даже не myExtension!

(function(){
    var myExtension = {};
    Components.utils.import("resource://.../module.jsm", myExtension);
})();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top