gpt4 book ai didi

javascript - 有什么理由不在不同的源文件中提供相同的模块吗?

转载 作者:行者123 更新时间:2023-11-29 22:21:39 24 4
gpt4 key购买 nike

例如:

// a.js
goog.provide('mypackage.a');
goog.provide('mypackage.commands');

mypackage.a.somevar = 1;

mypackage.commands.save = function(...) {...};

// b.js
goog.provide('mypackage.b');
goog.provide('mypackage.commands');

mypackage.b.somevar = 1;

mypackage.commands.read = function(...) {...};

// mypackage/commands.js
goog.provide('mypackage.commands');

mypackage.commands.runCommand = function(commandText, args) {
return mypackage.commands[commandText](args);
}

这是提供一组可扩展命令的好方法,还是有什么东西可以使这个复杂的东西我没有考虑过?

最佳答案

没有理由不能或不应该在不同的源文件中提供相同的模块。如果它对您的源代码组织方案有意义,那么这是一件非常好的事情。我们拥有 goog.provide() 的主要原因之一是,相同的符号可以在多个不同的地方使用,但定义在恰好首先运行的文件中。

如果我正确理解 goog.provide(),它所做的就是确保声明了一个对象。因此,goog.provide('mypackage.commands) 确保在全局范围内声明mypackage.commands。

所以 goog.provide('mypackage.commands'); 只是完成了类似这样的事情:

window.mypackage = window.mypackage || {};
window.mypackage.commands = window.mypackage.commands || {};

只有当您计划向源文件中的那个对象添加内容时,您才需要这样做。因此,如果多个源文件都将新项目添加到 mypackage.commands,那么每个源文件都会执行 goog.provide('mypackage.commands)` 以确保声明了正确的全局变量结构。

这似乎就是您在代码示例中所做的,这是一件非常好的事情。这取决于您自己的代码组织意识,是让多个源文件都贡献给同一个对象更好(就像您所做的那样),还是应该组织源文件,使属于一个特定 namespace 的所有代码都在同一个文件中文件。这真的取决于您以及您认为如何最好地组织您的源代码 - 没有正确或错误的答案,除了它的组织方式背后应该有一些韵律和原因。

有用的引用文章:https://developers.google.com/closure/library/docs/tutorial

关于javascript - 有什么理由不在不同的源文件中提供相同的模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118427/

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