javascript - 在调用内容时未修改 Javascript 中传递给构造函数的数组
问题描述
我在调用上下文中导入了以下模块:
function Controls(elem, viewMatrix) {
var xD, yD;
this.ppdX = 10;
this.ppdY = 10;
this.state = 0;
var dx = 0;
var dy = 0;
function getXY(evt) {
var x = evt.pageX - elem.offsetLeft;
var y = evt.pageY - elem.offsetTop;
return [x, y];
}
function onDown(evt) {
this.state = 1;
[xD, yD] = getXY(evt);
}
function onUp(evt) {
this.state = 0;
[dx, dy] = [0, 0];
}
function onMove(evt) {
if (!this.state) return;
var [x, y] = getXY(evt);
[dx, dy] = [x - xD, y - yD];
}
this.updateView = function () {
viewMatrix = Mtx.mult(viewMatrix, Mtx.rotY(-Mtx.DtoR * dx / this.ppdX));
viewMatrix = Mtx.mult(viewMatrix, Mtx.rotX(-Mtx.DtoR * dy / this.ppdY));
}
elem.addEventListener("mousedown", onDown.bind(this));
elem.addEventListener("mouseup", onUp.bind(this));
elem.addEventListener("mousemove", onMove.bind(this));
}
export default Controls;
调用上下文如下:
import Controls from './js/controls.module.js';
...
viewMatrix = Mtx.makeIdent(4, 4);
controls = new Controls(renderer.domElement, viewMatrix);
...
function animate() {
requestAnimationFrame(animate);
if (controls.state) {
controls.updateView();
...
console.log(viewMatrix);
}
...
}
其中 viewMatrix 是一个 4x4 数组,定义如下:
viewMatrix = [[...],[...],[...],[...]];
我可以看到,虽然 viewMatrix 在 updateView() 调用中发生了变化,但它在调用上下文中没有变化。数组应该通过引用传递,在这种情况下不是这样吗?
我知道我可以将矩阵从 updateView() 返回到调用上下文并在那里覆盖 viewMatrix,但我想知道它为什么不更新,也许还有另一种方法可以编写此代码以便它自行更新?
编辑乘法代码:
mult(A, B) {
var C = [];
var Ar = A.length, Ac = A[0].length;
var Br = B.length, Bc = B[0].length;
if (Ac != Br) {
console.log("mult(): dimentions mismatch");
return C;
}
for (let ar = 0; ar < Ar; ar++) {
C[ar] = [];
for (let bc = 0; bc < Bc; bc++) {
C[ar][bc] = 0;
for (let ac = 0; ac < Ac; ac++) {
C[ar][bc] += A[ar][ac] * B[ac][bc]
}
}
}
return C;
},
解决方案
推荐阅读
- reactjs - new Date() 总是返回本地日期....如何在 UTC 中获取 Date 对象?
- selenium - 在 selenium 中究竟是如何动态处理implicitWait 的?
- kubernetes - 如何使用 AKS 挂载本地卷 hostPath?
- python - Why pytorch model cannot recognize the tensors I defined?
- python - NetworkX g.neighbors(n) dict_keyiterator error message
- android - 通过设置为纵向模式的 xcode 在我的物理 iPhone 上启动颤振应用程序有效,但在通过 android studio 启动时无效
- android - 任务管理器的颤振推送路线?
- html - Internet Explorer 上的自定义范围滑块问题
- list - 从 Prolog 的列表中删除括号
- list - The argument type 'Iterable>' can't be assigned to the parameter type 'List'