当且仅当使用 JavaScript 中的变量时,如何计算该变量?

2024-03-15

这就是我现在正在做的事情。

var foo = function() {
  var x = someComplicatedComputationThatMayTakeMoreTime();
  this.foo = function() { return x; };
  return x;
}

它有效,但仅当 foo 作为函数调用时才有效

foo();

但是如果我想将其作为具有值的普通变量来调用怎么办?我可以将代码修改为

var foo = function() {
  var x = someComplicatedComputationThatMayTakeMoreTime();
  this.foo = x;
  return x;
}

这将允许我只将其作为函数调用一次,然后作为常规变量调用。但这仍然不是我想要的。另外,如果它不小心再次被作为函数调用并返回错误,事情就会变得复杂。

这在 JavaScript 中可能吗?

顺便说一句,这是针对 Chrome/Firefox 扩展的,因此 IE 兼容性并不重要。

最终使用 toString 因为 getter 不允许我重新定义整个属性,必须有一个函数与其关联。 toString 具有更清晰的语法。


使用 toString 怎么样?

var foo = function() {
  function someComplicatedComputationThatMayTakeMoreTime() {
        //your calculations
  }
  return {
      toString: function() { 
           return someComplicatedComputationThatMayTakeMoreTime(); 
      }
  }
}

更多关于JavaScript 中的对象到基元转换 http://www.adequatelygood.com/2010/3/Object-to-Primitive-Conversions-in-JavaScript

EDIT根据评论。使用单例(我认为它被称为):

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

当且仅当使用 JavaScript 中的变量时,如何计算该变量? 的相关文章

  • 如何使用 React 和 Jest 模拟 onPaste 事件?

    我正在尝试在我的反应项目上使用 JEST 测试来模拟粘贴事件 我有一个外部组件 App 其中包含带有 onPaste 事件的输入字段 我想测试过去的数据并检查输入值 it on past with small code gt Create
  • React Native + Redux 基本身份验证

    我正在寻找一种为我的反应本机应用程序创建基本身份验证的方法 我找不到任何反应本机应用程序的好例子 要登录 应用程序将电子邮件 密码 clientSecret 发送到我的服务器 如果OK 服务器返回accessToken refreshTok
  • 是否有相当于 jquery .load() 的原生 JavaScript

    与下面的 jquery 等效的本机 javascript 是什么 anyDiv load anyPage htm 就在这里 function load target url var r new XMLHttpRequest r open G
  • 如何通过文本搜索返回 JSON 数组中项目的索引位置?

    这是我的 JSON 数组 var planets Name Mercury Temperature 427 C Position 1 Name Venus Temperature 462 C Position 2 Name Earth Te
  • Vimeo 播放器 JS API 在 iOS 中无法运行

    我正在尝试使用 API 来播放视频 但只有在 iOS 中单击播放器中的播放按钮后它才有效 在桌面版和 Android 版 Chrome 中 它运行良好 http codepen io bdougherty pen JgDfm http co
  • 在原始文件之后插入克隆文件

    我试图在原始元素之后放置一个克隆元素 我做了一些研究 发现了如何创建克隆以及如何将克隆放置在原始副本之后 但我似乎无法将它们放在一起 这是我的代码
  • 如何修改 Elasticsearch 文档的 _source 字段

    问题 有没有办法从文档的 source 中清除 html html 的剥离可以是周期性的 触发的 或者理想情况下是在索引时即时进行的 我将数据输入到elasticsearch中 并针对分析器进行索引 该分析器在索引之前剥离不需要的htmls
  • NestJS:使用 JWT 将验证选项添加到 AuthGuard

    我正在尝试利用AuthGuard装饰器和护照 JWT 策略 遵循文档 https docs nestjs com techniques authentication 文档中的所有内容都运行良好 但我现在想保护 JWT 中包含的范围的路由 这
  • Facebook 分享不显示来自开放图元标签的图像

    我正在尝试将 Facebook 共享按钮集成到我雇主的网站 标题 网址 描述 简介均显示正确 但未附加任何图像 当共享对话框打开时 图像容器会闪烁 然后消失 就好像 facebook 正在尝试处理图像但失败一样 我正在使用 og image
  • 从 onclick 属性调用 e.stopImmediatePropagation()

    如何从事件对象中获取事件对象onclick属性 我努力了 a href something html Click me a 另外 我也尝试过这个 a href something html Click me a 但控制台只显示 a 元素 我
  • Python NameError,变量“未定义”

    它返回的错误是 NameError name lives is not defined 我知道代码并不是尽可能高效 这是我的第一个项目 但是无论我尝试做什么 都会弹出这个错误 我尝试为其创建一个全局变量 但这没有帮助 我真的很感激一些帮助
  • Sonarqube 未从 LCOV 检索我的 JavaScript 覆盖范围

    我有一个具有以下结构的应用程序 my application pom xml app scripts app js js 3rd party libs build node modules test 我已经创建了pom xml仅运行 Son
  • React this.setState 不是一个函数

    尝试编写使用第 3 方 API 的应用程序时不断收到此错误 类型错误 this setState 不是一个函数 当我尝试处理 API 响应时 我怀疑这个绑定有问题 但我不知道如何修复它 这是我的组件的代码 var AppMain React
  • preg_match_all JS 等效吗?

    Javascript 中是否有与 PHP 的 preg match all 等效的函数 如果没有 将正则表达式的所有匹配项放入数组的最佳方法是什么 我愿意使用任何 JS 库来让它变得更容易 您可以使用match使用全局修饰符 gt gt g
  • 无需递归即可展平多个嵌套数组的数组 - javascript

    也许这是一个愚蠢的问题 但我无法意识到是否可以在不使用递归的情况下展平多维数组 我用递归编写了一种解决方案 function transform arr var result arr forEach flatten function fla
  • jQuery 将所有 href="" 替换为 onclick="window.location="

    所以我有一个很酷的给你 我需要在渲染时扫描我的 html 文档并替换每个 href with onclick window location 不仅如此 我还需要将链接从 href 带到 window location 例如 如果我有 hre
  • 如何在 i18next 中使用多个命名空间?

    我刚刚启动 i18next 我想为项目中的每个模块创建翻译文件 看起来使用命名空间是执行此操作的正确方法 该项目可以使用多个视图创建页面布局 因此我需要能够同时翻译多个命名空间中的字符串 我创建了一个具有两个命名空间的简单示例 但我只能使用
  • 使用 javascript 将子元素添加到父元素

    我正在尝试添加一个子元素 to a 父元素如下 li要添加到ul 单击 Enter 按钮或按下键盘上的 Enter 键时 会生成一个新的li and delete按钮应该添加到ul 我的代码无法正常工作 有人可以帮我解决这个问题吗 HTML
  • 使用 JavaScript 更改网址栏中的域名

    有没有办法使用window history pushState或者任何其他js函数来更改地址栏中的整个url 我无法删除根部分 上下文 我的应用程序位于 Heroku 上 网址如下所示http mywebsite herokuapp com
  • 如何在 Javascript 中检测网络丢失?

    我的 Web 应用程序适用于多种手持设备 例如 iPad Galaxy 选项卡等 应用程序从服务器请求图像并在客户端上呈现 现在的问题有时会发生 在图像渲染过程中网络连接会丢失 而不是在设备上显示 html 无图像图标时 我想优雅地处理这种

随机推荐

  • 了解elasticsearch jvm堆的使用情况

    Folks 我正在尝试减少 Elasticsearch 部署 单节点集群 中的内存使用量 我可以看到正在使用 3GB JVM 堆空间 为了优化 我首先需要了解瓶颈 我对 JVM 使用如何分配的了解有限 字段数据看起来消耗 1 5GB 过滤器
  • 如何使用 PhpStorm 和 Xdebug 调试 AJAX (POST)?

    我已将 PhpStorm 配置为调试 HTTP GET 但仅当我直接加载页面时 当我想要调试 AJAX 时 我获取 JS 请求的 URL 并创建一个 PhpStorm 配置来调试它 不是特别优雅 是吗 当然 我不能对 POST 请求这样做
  • 什么是投影?

    从数据库理论和 NHibernate 的角度来看 使用 SetProjection 时什么是投影 投影是关系代数的基本运算之一 它采用一个关系和该关系的属性列表 可能为空 作为输入 它输出仅包含指定属性列表的关系删除重复的元组 换句话说 输
  • 多个事实的聚合解决方案

    尝试创建一个谓词 timePeriod 2 计算特定事实的两个日期之间的时间段 我已经设法自己做到这一点 但当 其他答案 存在于同一列表中时会遇到问题 即更容易用示例解释 我有以下知识基础事实 popStar Jackson 1987 19
  • 以 HTML 代码作为输入的 Angular 组件

    我正在创建一个角度组件 它显示突出显示的 HTML 代码及其执行结果 显示的 HTML 代码位于 pre html 元素内 至于结果的预览 它是硬编码的 pre class prettyprint lang html lt button t
  • 带 Join 的 TSQL Update 语句

    我有两个具有父 子关系的表 我想用孩子的数据更新父母 但是 假设有 2 个孩子 我希望能够根据孩子的其他列来选择哪个孩子用于更新 这是我到目前为止所拥有的 父级 test 孩子 exdat 预期结果 更新后父级的结果应仅包含大写字母 我想用
  • 如何在一页中执行多个查询?

    我编写了这段代码 但是当我运行它时没有输出 没有错误但是问题没有输出 如何在同一页面中执行多个查询
  • ConstraintLayout 问题 - ImageView 16:9 上边距不合适

    我想使用 ConstraintLayout 构建以下布局 我使用这个源进行布局
  • Python记录器不尊重setLevel?

    我花了一些时间浏览网站上的 Python 记录器问题 希望我的问题能在那里得到解决 我已经设置了一个带有两个流处理程序的记录器 它们具有不同的格式和日志记录级别 这是我的代码库中的功能片段 import os import time imp
  • 如何从选定的文本中获取相邻字符?

    我有一个像这样的字符串 var comment this is a test Assume this i已选择 现在我需要null 左侧 和s 右边 我怎样才能得到它们 我可以像这样获取选定的文本 function getSelection
  • Shapeless 不适用于一般环境

    我仍在尝试了解 Shapeless 以及较小程度上的 Scala 并且我一直在编写一些简单的代码来为案例类生成随机实例数据 主要基于此处的指南 http enear github io 2016 09 27 bits of shapeles
  • 在没有窗口引用的选项卡 dom 之间进行通信[重复]

    这个问题在这里已经有答案了 我使用以下命令打开包含一些页面内容的新选项卡 在新进程中 var p document getElementById myElement var a document createElement a a setA
  • 如何使用 knit/Sweave 中 R 变量的值在 LaTeX 中编写 if-then 语句

    我目前正在使用 knitr 以及 R 3 0 2 和 RStudio 来生成 LaTeX 报告 我的报告被输入为 Rnw 文件 并使用 knit2pdf 函数进行编译 我想用一个LaTeX 中的 if then 公式 http en wik
  • 视图模型的单独项目以“实施”MVVM:如何打开对话框?

    在遵守 MVVM 模式的同时打开对话框似乎是常见问题之一 此处和其他地方 我知道有像 MVVM light 这样的框架可以解决这个问题 但我目前正在开发一个非常小的个人项目 出于学习目的 我尝试自己完成大部分工作 为了 强迫 自己注意引用
  • 如何在 Swift 3 中使用 Facebook API 访问个人资料图片?

    早些时候我尝试像这样访问 let gr2 FBSDKGraphRequest FBSDKGraphRequest graphPath me parameters fields id picture width 198 height 198
  • 围绕文本创建表格

    我有一个单词列表 每个单词都独占一行 这是表格的第一列 我想手动创建第二列 我现在想使用一些插件 它将在文本周围创建一个 ASCII 表 因此我有很好的格式 每列中的起始字母应该在一个 垂直线 中 或者我应该能够快速移动到通过一个快捷方式正
  • 期望 ssh 脚本返回无效命令名

    我正在尝试编写一个 Expect 脚本 该脚本将 ssh 进入服务器 发送 sudo su 然后检查 iptables 状态并将输出放入服务器上的日志文件中 下面是脚本 1 usr bin expect 2 exp internal 1 3
  • 在 Spring Data MongoDB 中为 ZonedDateTime 注册一个新的可审计日期转换器

    我想要我的可审计 CreatedDate and LastModifiedDate 要使用的 MongoDB 文档ZonedDateTime fields 显然 Spring Data 不支持这种类型 看看org springframewo
  • 最Pythonic的方式进行输入验证[重复]

    这个问题在这里已经有答案了 在 Python 中进行用户输入验证的最 正确 的 Pythonic 方法是什么 我一直在使用以下内容 while True stuff input Please enter foo try some test
  • 当且仅当使用 JavaScript 中的变量时,如何计算该变量?

    这就是我现在正在做的事情 var foo function var x someComplicatedComputationThatMayTakeMoreTime this foo function return x return x 它有