【问题标题】:Can I enumerate the exports of a JavaScript module?我可以枚举 JavaScript 模块的导出吗?
【发布时间】:2017-10-26 21:04:55
【问题描述】:

下面valuesfile-2.js中的普通对象吗?

// file-1.js
export {
    FOO,
    BAR
} from '~/my-values';

// file-2.js
import * as values from '~/file-1';

// what is `values` here? an object instance?

我问是因为我想使用values.hasOwnProperty('FOO') 之类的东西,并且汇总引发了以下错误:

'hasOwnProperty' is not exported by 'file-1.js'

附带问题:有没有使用 import 和 export 关键字测试代码的便捷方法?据我所知,Chrome 开发工具在 sn-ps 中不支持它们。

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    这些是module namespace exotic objects。它们具有异国情调意味着它们不是完全正常的物体(它们具有不同的内部结构)。

    他们的原型链上也没有Object.prototype,因此您不能使用hasOwnProperty,但您应该可以将它与Function.prototype.callFunction.prototype.apply 一起使用,因为他们确实有一个用于@ 的内部方法987654322@

    Object.prototype.hasOwnProperty.call(values, 'FOO');
    

    你也可以在上面使用Reflect.has

    Reflect.has(values, 'FOO');
    

    此外,由于原型是 null,您几乎也可以使用 in

    'FOO' in values
    

    【讨论】:

      【解决方案2】:

      假设 X.js 如下:

      export const t = 0;
      export const t2 = 4;
      export default w = -1;
      var w3 = -9;
      

      当您从 X 导入 * 作为 Y 时;

      基本上,您可以从该文件中获取所有导出,然后通过调用具有导出功能的 X.some var 来获取它们。 例如:

      var t = X.t; // local t will be equal 0.
      

      如果不导出,则无法从 X 文件中获取 vars(因为它们是在本地设置的。

      你也可以像这样导入上面提到的代码,例如,通过获取你需要的值。

      import {t} from X.js
      var local_t = t; // local_t is set to 3
      

      导出默认值意味着如果您导入文件而不用 const 或 * 说明,您将获得默认导出值。 例如:

      import something from X.js;
      var _local = something; //_local equals -1
      

      希望对你有帮助。

      【讨论】:

      • 谢谢。我可以枚举模块的属性(“导出”)吗?我想使用类似module.hasOwnProperty('moduleName');
      猜你喜欢
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2019-12-06
      相关资源
      最近更新 更多