gpt4 book ai didi

javascript - 从模块加载特定方法。设计模式

转载 作者:行者123 更新时间:2023-12-03 08:47:36 25 4
gpt4 key购买 nike

我最近开始使用 RequireJS,它使我能够以一种很好的方式组织我的代码。因此,definerequire 成为了我最好的 friend 。但现在我看到一个问题,我不知道如何用 RequireJS 或某些特定的设计模式来解决这个问题。所以,想象一下,我有一个非常巨大的模块,其中包含无数的方法。我这样定义它:

define(function(BIG_MODULE){
return {
property_0: "value_0",
property_1: "value_1",
....
property_zillion: "value_zillion",
method_0: function(){...},
...
method_zillion: function(){...}
}
});

请不要问我为什么我有这么大的模块 - 它只是一个抽象。所以,现在的问题是 - 是否可以导入或 require 不是整个模块,而是它的一些属性和方法?假设我以某种方式将我的模块分配给了某个本地实例,如果我调查该实例的内部结构,那么我可以看到,它只包含一些特定的属性和方法。可能吗?

最佳答案

您绝对应该做的一件事是不要导出任何不属于模块公共(public) API 一部分的内容。

话虽这么说,RequireJS 没有只导入模块的一部分的概念。当您将模块列为依赖项时,RequireJS 会加载该模块,加载并执行其依赖项,使用已解析的依赖项调用其工厂函数(这是传递给 define 的函数),并记录该模块的内容导出。然后,当您在其他地方使用它时,模块的导出值将绑定(bind)到回调中的相应参数。所以在这段代码中

require(["foo"], function (foo) {...

您将获得模块“foo”导出的所有内容,作为foo

如果您使用ES6 (又名 ES2015)并将 ES6 模块转换为 AMD 模块(例如,通过 Babel ),然后您可以拥有一些基于语言的部分导入概念​​。例如,如果 foo 像这样导出 return { bar: 1, baz: 2, bwip: 3 } 那么你可以只导入 bar 就像这个:

import { bar } from "foo";

console.log(bar);

这会将 1 输出到控制台。但请注意,这不会改变 RequireJS 加载和处理模块的方式。 RequireJS 读取整个模块并执行所有工厂函数。上面的 import 仅影响加载 "foo" 的代码如何访问导出的值。

关于javascript - 从模块加载特定方法。设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com