对在ECMA2015中导入或创建的模块做出反应

时间:2016-12-09 17:30:40

标签: javascript constructor module ecmascript-6

假设我们有一个像这样声明的模块。

import Stuff from "./stuff";
export default {
  things: { a: 1 },
  stuff: Stuff
}

然后我们获取另一个模块并使用如下所示。

import Donkey from "./stuff-and-things"
console.log(Donkey.things.a);
console.log(Donkey.stuff.whatever-field);

我希望能够对前者导入后者做出反应,这样当 Donkey 将被创建(添加,合并,注入任何它被称为)时,一个函数将火。

像这样的伪代码。

import Stuff from "./stuff";
export default {
  constructor: function(){ console.log("I'm alive!"); }
  things: { a: 1 },
  stuff: Stuff
}

有可能吗?我现在已经googlearching了一段时间,我一无所获 - 没有关于如何否定它的建议。可能,由于对主题的无知,我一直在使用错误的术语。

1 个答案:

答案 0 :(得分:2)

导入模块时无法通知。我猜你能做的是导出一个函数。然后,为了对该模块做任何有用的事情,必须首先调用该函数。

例如:

// stuff-and-things
import Stuff from "./stuff";

const api = {
  things: { a: 1 },
  stuff: Stuff
};
export default function() {
  console.log("I'm alive!");
  return api;
};

// other
import stuffAndThings from "./stuff-and-things"
const Donkey = stuffAndThings();
console.log(Donkey.things.a);
console.log(Donkey.stuff.whateverField);