需要原型内部或外部的功能

require function inside or outside of prototype?

本文关键字:外部 功能 内部 原型      更新时间:2023-09-26

我经常使用这样的原型:

在不同的文件中一遍又一遍地要求相同或相似的功能。要求Element在范围内还是在范围外更好,如下所述?

我想它应该在外面,否则我会在我的代码中创建大量Element的副本,不是吗

var Element = require("./Element.js")
var _ = function(){
    this.element = new Element();
    this.stuff;
}
_.prototype.setStuff = function(stuff){
    this.stuff = stuff
}
_.prototype.doStuff = function(){
    this.stuff();
}
module.exports = _;

谢谢。

由于这是一个node.js模块,这里有几个注意事项:

  1. CCD_ 2是同步的。因此,您永远不想在实时服务器请求中使用它,因为这会阻碍服务器的可伸缩性。在初始化模块和服务器时,通常需要使用require()一次。

  2. node.js模块中声明的变量的作用域仅限于该模块。从技术上讲,模块作用域在模块函数内部,因此在其中声明的任何变量都已经是局部变量,因此不需要任何额外的作用域保护。

  3. 模块被缓存。因此,如果在同一路径上多次执行require(),速度会非常快。在第一次实际加载和初始化模块之后,所有后续调用都只返回相同的缓存模块句柄。因此,不要试图破坏代码的结构来减少您称为require()的地方的数量。编写干净的代码,如果这需要在同一个模块上调用require()几次,那也没什么大不了的。

需要相同或相似的功能文件。要求Element在范围内更好吗是否超出了以下范围?

您通常希望将require()语句放在node.js模块的最高级别,因为您希望在模块首次初始化时对它们进行一次初始化,并且希望与模块中的所有代码共享该模块句柄。如果你的代码足够复杂,以至于你想在几个不同的地方为同一个模块调用require(),以使你的代码更加分区,那么你可能无论如何都应该把你的代码分解成单独的模块,并让每个模块require()自己需要。

我想它应该在外面,否则我会创造很多元素的副本遍布我的代码,

在模块的最高范围外。没有什么理由不只加载一次模块,并与模块中可能想要使用它的所有代码共享模块句柄


在一些特殊情况下,您可能只想在运行时的某些特定条件下,仅在需要模块时动态加载模块。这种情况很少见,而且由于加载模块的同步性,这样做会对性能产生影响,因此很少这样做。因此,我不想在之前的推荐中过于绝对,但也想解释一下,只按需加载内容是罕见的,而且会产生后果。

此处元素应在_函数范围内定义,除非它在IIFE内定义。如果它是在IIFE中定义的,那么就不会有任何问题,否则Element将暴露在窗口范围中,使用控制台我们可以覆盖Element函数。

希望这对你有帮助。