javascript - 对象属性中使用的全局变量未在对象内部更新 - javascript
问题描述
我有一个像这样设置的对象:
let xVal = 0;
const myObj = {
infoText: "The value of x is: " + xVal
}
稍后会引用此 infoText 以在将鼠标悬停在元素上时显示一些工具提示。
function showTooltip(obj) {
targetEl = document.getElementById('targetId');
targetEl.innerHTML = obj.infoText;
}
xVal 的值可以改变。我遇到的问题是,无论该值是否已更改,当我将鼠标悬停在我的元素上时,它将始终显示 xVal 的初始值。我认为这是因为 myObj.infoText 在启动时建立并提取 xVal 的初始值。如何让 myObj.infoText 显示当前的 xVal 并跟上变化?
编辑 - 这是我的代码的一个更好的例子,我意识到我最初提供了一个糟糕的示例。
let count = 0;
let clickVal = 1;
const myObj = {
cost: 10,
infoText: `This displays the current value of your click <br />
Current click = ` + clickVal
};
function cardContent(obj) {
targetEl = document.getElementById('targetId');
targetEl.innerHTML = obj.infoText;
}
cardContent(myObj); // initialize card content
function handleClick() {
count += clickVal;
}
function upgradeClick() {
count -= myObj.cost;
clickVal += 1;
cardContent(myObj) // attempting to update the text to reflect new value
}
有一个调用按钮handleClick
和一个调用upgradeClick
. 使用 CSS,将div
鼠标悬停在upgradeClick
按钮上时会隐藏并显示以下内容。
<div id='targetId'></div>
这是infoText
表演的地方。
解决方案
你可以使用像getter这样的东西
let xVal = 0;
const myObj = {
get infoText() {return "The value of x is: " + xVal;}
}
function showTooltip(obj) {
console.log(obj.infoText);
}
showTooltip(myObj);
xVal = 29;
showTooltip(myObj);
xVal = 794;
showTooltip(myObj);
推荐阅读
- c - 使用 c 递归创建线程
- docker - 无法将文件正确复制到 docker 映像
- python - 为什么 iloc() 的一种使用会给出 SettingWithCopyWarning,而另一种则不会?
- python - 来自 CSV 文件的新手 Matplotlib 和 Pandas 绘图
- html - iframe 没有出现在 IOS 上
- javascript - 设置 cookie 并在 express、node.js 中使用 router.post 获取 json 响应时出错
- parsing - 基于缩进解析类似 ML 的语法,所有内容都被视为指令/表达式
- java - 是否可以在 JDK 11 上使用 jlink 来创建包含已删除的 Java SE EE 模块的运行时?
- coq - Coq 中单例类型单元的归纳原理是如何工作的?
- javascript - 单击时如何使用js隐藏可折叠元素