javascript - 将变量属性新值添加到以前的值(javascript)
问题描述
下午好。是否可以将新的对象属性值添加到其先前的值?我尝试了以下代码,但浏览器返回“超出最大调用堆栈大小”。属性 translate 将用于水平拖动图表。它将移动将在画布图表上绘制的数组的数据范围。亲切的问候。
function drawChart() {
.
.
.
tickerData = [..., ..., ...];
dataLength = tickerData.length;
barSpace = Number(localStorage.getItem("barspace"));
barWidth = (0.7 * barSpace).toFixed(1);
rightSpan = 3 * barSpace;
barStrokeWidth = 1;
if(!(dataLength - dragCanvas.translate() > dataLength)) {
dataLength = dataLength - dragCanvas.translate();
}
else {
dataLength = dataLength;
}
.
.
.
}
var dragCanvas = {
isTrue : false,
drag : [0, 0],
translate : function() {
return this.translate() + Math.ceil((this.drag[1] - this.drag[0])/barSpace);
}
};
function updateChartPaint(e) {
var pointerX = e.clientX;
var pointerY = e.clientY;
if(!dragCanvas.isTrue) {
dragCanvas.drag[0] = pointerX;
dragCanvas.drag[1] = pointerX;
}
else {
dragCanvas.drag[1] = pointerX;
$("#chartCanvas").empty();
drawChart();
}
}
document.addEventListener("mousemove", updateChartPaint, false);
document.getElementById("chartCanvas").onmousedown = function() {
dragCanvas.isTrue = true;
};
document.getElementById("chartCanvas").onmouseup = function() {
dragCanvas.isTrue = false;
};
解决方案
您this.translate()
在函数内部调用,translate
因此它进入一个无限循环调用自身,直到最终超出调用堆栈。
从translate
调用方式来看,该函数应该像这样定义:
translate : function() {
const newTranslate = this.oldTranslate + Math.ceil((this.drag[1] - this.drag[0])/barSpace);
this.oldTranslate = newTranslate;
return newTranslate;
}
oldTranslate: 0
我假设它barSpace
是在函数之外声明的,并且将是一个有效值。它似乎是从设置的,localStorage
但如果它不存在,Number(localStorage.getItem("barspace"))
则将为零,并且从的返回值translate
将是Infinity
。这是故意的吗?
还updateChartPaint
设置了一个名为pointerY
但从不使用它的变量。忽略 Y 轴的拖动并且只有 X 轴的变化才重要,这是否正确?
推荐阅读
- python - 使用模糊匹配匹配数据框列和值列表并将匹配值添加到新列
- python - 如何发送 webhook 数据并将其转换为 CSV 文件
- android - 我想在激活安卓终端的摄像头的情况下开灯
- sql - 使用窗口函数 LAG() 时如何保留第一条记录?
- powershell - 使用 PowerShell 通过 SFTP 计算 ZIP 文件中的文件
- r - 滑块输入白小时闪亮
- javascript - Google Apps 脚本网络应用返回一个奇怪的错误
- python - 当减数为 None 时,Djano 使用减法操作进行注释返回 None
- flutter - Flutter_downloader Worker 结果在 Flutter 2.5.0 中工作失败
- javascript - 我可以在 Javascript 中使这段代码更清晰吗?