首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSM导入以覆盖当前对象

JSM导入以覆盖当前对象
EN

Stack Overflow用户
提问于 2014-10-03 04:17:37
回答 3查看 113关注 0票数 0

我的插件作用域中有一个现有的对象。its:var ostypes = {}

它是通过导入以下jsm创建的:Cu.import('chrome://myaddon/content/modules/ostypes_generic.jsm');

此文件的内容为:

代码语言:javascript
复制
var ostypes = {
  flock_overide: 'blah',
  no_override: 'blah'
};

所以现在我想导入这个jsm:Cu.import('chrome://myaddon/content/modules/ostypes_mac.jsm');

它是这样的:

代码语言:javascript
复制
var ostypes = {
  flock_overide: 'blah_replaced'
};

在我的插件作用域中,我想导入generic.jsm,然后导入mac.jsm,最后我想让ostypes看起来像这样:

代码语言:javascript
复制
var ostypes = {
  flock_overide: 'blah_replaced',
  no_override: 'blah'
}

然后,我想替换该对象中的一些内容,并添加更多内容。

EN

回答 3

Stack Overflow用户

发布于 2014-10-03 12:15:14

尝试通过设置作用域Components.utils.import(url [, scope]); (Components.utils.import)将其导入到主对象中

代码语言:javascript
复制
let mainObject = {

  init: function() { 
    Components.utils.import('chrome://myaddon/../ostypes_generic.jsm', this);
    // code
  },

  // code
}

就我个人而言,我还将其绑定到主对象,使其成为对象的属性

代码语言:javascript
复制
this.ostypes = {
  flock_overide: 'blah',
  no_override: 'blah'
};
票数 2
EN

Stack Overflow用户

发布于 2014-10-03 16:05:15

您可以使用mix function of the core/heritage module from Add-on SDK

代码语言:javascript
复制
var { mix } = require('sdk/core/heritage');
var mixedostypes = mix(genericostypes, macostypes);

请参阅how to access Add-on SDK modules from non Add-on SDK extensions

票数 2
EN

Stack Overflow用户

发布于 2014-10-04 10:06:37

看起来主要的问题是您正在用您的第二个导入调用重新定义(替换) ostypes。如果您希望第二次导入时只修改对象,那么对于/modules/ostypes_mac.jsm文件,您应该执行如下操作:

代码语言:javascript
复制
if(typeof ostypes === "undefined") {
    //Not yet defined, so define it.
    var ostypes = {};
}
if(ostypes === null || typeof ostypes !== "object") {
    //Already defined, but not an object which we want to add-to/change.
    ostypes = {};
}

ostypes.flock_overide = 'blah_replaced';

我这样做,将一个扩展中的多个JavaScript模块导入到该扩展的一个整体名称空间中。每个JSM检查并定义扩展的名称空间对象(如果尚未定义)。然后,每一个都创建该命名空间的属性,该命名空间是包含功能块的对象。功能块以子名称空间结尾,如下所示:

myExtension.Global = {extension's global variables, functions}

myExtension.Utilities = {extension's utility functions}

等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26168942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档