是否可以为所需文件获取不同的范围?

2023-12-09

假设我有一个名为 import.js 的示例文件

var self;
function Test(a,b){
   this.a = a;
   this.b = b;
   self = this;
}
Test.prototype.run = function(){
   console.log(self.a, self.b)
}
module.exports = Test

当我需要文件并创建一个新的“对象”时,一切都工作正常,但是当我创建第二个对象时,它们都可以访问 self,只有后一个可以工作。

var Test = require('./import.js');

var one = new Test(1,2);
one.run()
1 2

var two = new Test(3,4);
two.run()
3 4
one.run()
3 4

有没有办法重新要求该文件,以便它创建单独的范围?

将其作为两个不同的变量是行不通的,

var Test1 = require('./import')
var Test2 = require('./import')
var one = new Test1(1,2);
var two = new Test2(3,4);
one.run()
3 4

但复制文件正是我正在寻找的..

var Test1 = require('./import1');
var Test2 = require('./import2');
var one = new Test1(1,2);
var two = new Test2(3,4);
one.run();
1 2

是的重写self into this可以,但是,但是如果不修改 import.js 文件或复制它,这可能吗?


在这里回答我自己的问题,但至少有两种方法可以实现这一点......

(1)删除缓存

如何在node.js中的“require”之后删除模块?

var Test1 = require('./import.js');
delete require.cache[require.resolve('./import.js')]
var Test2 = require('./import.js');

var one = new Test1(1,2);
var two = new Test2(3,4);

one.run()
1 2
two.run()
3 4

看起来甚至没有那么混乱,尽管它的效率非常低,并且以这种方式编写代码会很快变得昂贵......


(2) 使用函数范围

因为 require 读取文件然后运行它,

var Test = require('./test.js');

相当于

var Test = eval( fs.readFileSync('./test.js', 'utf8') );

因此,如果您不使用 require,而是读取该文件,则可以在函数内部建立新的作用域:

var fs = require('fs');
var File = fs.readFileSync('./import.js', 'utf8');
var Test1, Test2;
(function(){ Test1 = eval(File); })();
(function(){ Test2 = eval(File); })(); 

文件内的 self 现在将存储在您创建的函数范围内。所以再一次:

var one = new Test1(1,2);
var two = new Test2(3,4);

one.run()
1 2
two.run()
3 4

有点混乱,但比每次删除缓存并重新读取文件要快得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以为所需文件获取不同的范围? 的相关文章

  • 使用javascript滚动滚动条或鼠标滚轮后触发事件

    我想知道是否可以触发事件after使用滚动条或鼠标滚轮 或在触摸设备上滑动 时滚动页面 基本上 我想检测用户何时停止滚动 以便我可以进行 AJAX 加载 而不是在滚动时加载 看起来jQuery s scroll 每次用户滚动时都会触发 并且
  • 为什么 Promise `.then` 方法的回调是反模式

    我在 StackOverflow 上看到了答案 人们建议为 AngularJS 服务提供回调函数 app controller tokenCtrl function scope tokenService tokenService getTo
  • querySelector 搜索直接子级[重复]

    这个问题在这里已经有答案了 我有一些类似 jquery 的函数 function elem return gt someselector elem 问题是我怎样才能做同样的事情querySelector 问题是 gt 选择器中querySe
  • 如何在 Windows 网络中的 Intranet Web 应用程序中获取用户的用户名

    我内部有一个简单的 HTML 页面 它只显示一个表单并要求用户填写 我想自动捕获Windows域用户名和机器名 并将其与表单中收集的数据一起提交 我可以在客户端这样做吗 HTML JavaScript 或者我被迫在服务器端执行此操作 我还不
  • 是否有任何理由使用 axios 而不是 ES6 fetch [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 研究了 axios 和 ES6 fetch 的文档 我发现两者非常相似 并且都受到 ajax 及其简写的强烈影响 axios 的主要优点是浏览器
  • 如何使用 Nextjs/React 将 JSON 对象导出到 Excel?

    我有一个检索 json 对象的端点 如下所示 data id 1 temaIndicador Indian codigo 001 observaciones Interactions Specialist tertiary Regional
  • 仅从功能区打开一个对话框

    我有一个带有登录按钮的功能区 可打开登录对话框 我想将对话框的数量限制为一个 我正在使用函数 displayDialogAsync startAddress options callback https learn microsoft co
  • 插件 gulp-babel 错误:插件/预设文件不允许导出对象,只能导出函数

    我现在尝试在我的 Ionic v1 应用程序中使用 JavaScript 2015 ES6 包 json name test version 1 0 0 dependencies ionic native deeplinks 4 18 0
  • document.write 在同一页面上显示内容。

    我对 javascript document write 方法有疑问 大多数情况下 当我使用 document write 时 它会向我显示在不同页面中使用该方法编写的内容 例如 如果我写这样的命令 document write Hello
  • 公开闭包内的方法

    当我们在闭包内创建一个方法时 该方法将成为该闭包的私有方法 并且在我们以某种方式公开它之前无法访问它 怎么可能暴露呢 您可以返回对它的引用 var a function var b function I m private alert go
  • 在 Twig 的父作用域中设置变量

    在Smarty你可以做 var bla scope parent 在 Twig 中可能吗 不建议使用块 我知道 我需要变量 如果您不想使用default 过滤器 即 当您想在整个父模板和子模板中多次使用该变量时 您实际上可以在父模板中定义一
  • 是否有跨浏览器的方式在Javascript中设置style.float?

    通常 如果您需要在 JavaScript 中设置样式属性 您可以这样说 element style attribute value 虽然略有不同 但属性名称通常与 HTML 属性名称类似 尽管是驼峰式 对我来说问题是 float 属性不起作
  • Mongoose 总是返回空数组? [复制]

    这个问题在这里已经有答案了 我是nodejs i的新手 我已经有一个名为aqi的数据库 集合名称为pln 我试图在网页上显示集合中的所有记录 但猫鼬总是返回空数组 我已经用其他数据库测试了它 但我可以从它们获取数据 但对于 pln mong
  • 等待异步 grunt 任务完成

    我收到了 grunt 设置 其中一个新任务应该执行 grunt task run 已经存在的任务 要执行的任务是异步的 新任务应该等待异步任务完成 执行此操作的首选方法是什么 grunt 已经涵盖了这一点 你应该将你的任务声明为异步任务 并
  • 如何跨多个 React Redux 组件使用 requestAnimationFrame 实现游戏循环?

    努力思考最好的解决办法 我可以使用递归调用requestAnimationFrame有一个游戏循环 export interface Props name string points number onIncrement gt void o
  • 文件缓存:查询字符串与上次修改时间?

    我正在研究缓存网站资源的方法 并注意到大多数与我类似的网站都使用查询字符串来覆盖缓存 例如 css style css v 124942823 后来 我注意到每当我保存 style css 文件时 最后修改的标头都会 更新 使得查询字符串变
  • 将默认搜索文本添加到搜索框 html

    我正在努力将 搜索 文本添加到搜索框 我正在努力实现 onfocus 消失文本 And onblur 重新出现文本 到目前为止 我已经实现了这一点 但我必须将其硬编码为 html eg
  • JavaScript setTimeout 和更改系统时间会导致问题

    我注意到如果我设置setTimeout未来1分钟 然后将我的系统时间更改为过去5分钟 setTimeout功能将在 6 分钟后触发 我这样做是因为我想看看夏令时系统时钟更改期间会发生什么 我的 JavaScript 网页使用setTimeo
  • Firebase 身份验证和实时应用程序数据库如何保护自身安全?

    从一般开发的角度来看 我很好奇如何保护在线资源的访问 我们使用以下 Firebase 配置参数初始化 Web 应用程序 apikey authdomain projectid databaseurl messagesenderid 服务器如
  • 从json中获取所有子节点

    我有以下 json var source k 01 k 02 children k 05 k 06 children k ABC k PQR k 07 k 03 我希望能够指定 k 的值并取回所有孩子 以及孙

随机推荐

  • 在多个 UIView 上添加 Facebook Shimmer

    我正在尝试在具有多个 UIView 的 UICollectionViewCell 上添加 Facebook Shimmer For 一个 UIView 使用下面的代码可以正常工作 let shimmeringView FBShimmerin
  • 执行存储在数据库中的Java代码

    我有定期推送到数据库的 Java 代码 解释它为什么在数据库中太复杂 这只会将焦点从主要问题上移开 在运行时我查询数据库 我可以执行从数据库获取的代码吗 我只将 main 方法的内容存储在代码中 运行数据库的服务器是HTTP 服务器 数据库
  • Apache Flink:Python 流 API 中的 Kafka 连接器,“无法加载用户类”

    我正在尝试 Flink 的新 Python 流 API 并尝试使用以下命令运行我的脚本 flink 1 6 1 bin pyflink stream sh examples read from kafka py python 脚本相当简单
  • Microsoft JScript 运行时错误:对象预期代码 800A13F

    我刚刚开始学习和培训node js 我已经安装了 Node js 版本 2 14 7 64 位 然后 我正在编写代码来制作基本服务器 var sys require sys my http require http my http crea
  • MySQL基于列值的内连接表

    假设我有一个具有以下结构的表 stats tableName id pageViews tableName 列对应于数据库中的单独表 当针对 stats 运行查询时 针对 stats 进行内部联接的最佳方法是什么 tableName列结果来
  • 如何加载独立于数据的 UI

    我正在网络服务器中使用 C 和数据库创建一个应用程序 从网络服务器访问数据时 速度非常慢 并且表单也会挂起 直到加载数据 有没有办法先加载表单 然后再加载数据 解决这个问题的常用方法是使用BackgroundWorker class pub
  • 使用 C#(Mono) 在 Mac 上获取唯一系统 ID

    我使用 Mono 为 Mac 移植一个 Windows 应用程序 我无法在 Mac 中使用 DPAPI 并且我认为在 Mac 中为用户级程序获取主板 CPU id 存在限制 那么 Windows 中是否有类似 DPAPI 的东西我可以使用
  • RequestParam 的自定义验证不适用于 Spring MVC

    我无法使用 Spring MVC 进行自定义验证 我实现了自己的参数注释和自定义验证器 所有内容都在下面给出 但验证从未发生 任何想法将非常感激 控制器 Validated RestController public class FooCo
  • 具有构造函数的类的 C++ 向量

    Using g and ubuntu include
  • 在 PHP 中从图像中裁剪空白

    PHP 中是否可以删除图像周围的空白 注意 澄清一下 我指的是 Photoshop 修剪功能之类的东西 Thanks 要修剪图像中有趣部分周围的所有空白 如您所说 首先我们要找出 空白 停止的位置 然后复制这些边界内的所有内容 load t
  • 如何使用 Nokogiri::XML::Builder 将非转义 & 符号添加到 HTML

    我想使用 Nokogiri 中的 XML 生成器向 HTML 添加诸如项目符号 之类的内容 但所有内容都被转义了 我该如何防止它被逃脱 我希望结果是 span 8226 span 而不是 span amp 8226 span 我只是这样做
  • 为什么使用 CryptoStream 而不是 TransformBlock?

    文档从未真正提及原因CryptoStream应该使用而不是TransformBlock and TransformFinalBlock除此之外 它会自动调用所需的任何一个 因此 为什么要使用这个答案中的代码 https stackoverf
  • 如何解码UTF8字节?

    如何在 C 中解码字符串中的 UTF8 字节 示例 解码此输入 Poluci C3 B3n 要输出这个 Poluci n 此编码似乎是 URL 编码 不是 UTF 8 编码 您可以在 NET 中使用多种不同的方法对其进行取消编码 HttpU
  • 如何删除 Android 上所有可能缓存的令牌或会话 ID?

    一个奇怪的问题 但希望有人能回答 我正在开发一个与 Facebook 连接的移动应用程序 一切都很顺利 已经持续了大约一周 我可以授权和删除授权并发布到用户的提要 在周六或周日 我修改了我的请求以添加离线访问 大约在那个时候 不幸的是 我无
  • 透明 Java 窗口上的不透明组件

    我已经成功地使 java 窗口透明 但在这些窗口之上叠加不透明组件时遇到了麻烦 JFrame setOpacity 0 和 AWTUtilities setWindowOpacity 都将透明度传输到组成组件 此外 JFrame setBa
  • Python 中的图像创建和字体

    我利用 PIL 在 python 中创建了一组图像 除此之外 我还实现了 textwrap 以便将文本添加到我创建的图像上 但是它们并不十分完美 首先 下面是我创建的三个图像示例 这三个图像具有不同的宽度 但我希望它们都具有相同的宽度 而高
  • 邮政编码的正则表达式

    可能的重复 最终的邮政编码和邮政编码正则表达式是什么 我需要正则表达式 它可以满足我的邮政编码的所有三个条件 例如 12345 12345 6789 12345 1234 任何指示和建议将不胜感激 谢谢 d 5 s d 4 字符串的开头 d
  • 通过VB6发送电子邮件

    我想知道是否有办法通过VB6发送电子邮件 SMTP 我有一个应用程序 只需要在用户完成后发送一封简单的电子邮件 让一组人知道该应用程序已处理 有没有办法做到这一点 是的 取决于您使用的 Windows 版本 假设更高版本之一 CDO Mes
  • Firebase 云函数初始化不工作

    我想使用 Firebase 云功能 但是当我尝试初始化存在的项目时出现错误 这是错误 错误 HTTP 错误 403 调用者没有权限 我之前创建了项目 然后移动了项目文件夹 当我尝试部署时 它不起作用 我不记得我遇到了哪个错误 然后我尝试初始
  • 是否可以为所需文件获取不同的范围?

    假设我有一个名为 import js 的示例文件 var self function Test a b this a a this b b self this Test prototype run function console log