javascript - 在 Javascript 中通过引用传递对象和属性
问题描述
我已经看到很多关于在 Javascript 中通过引用传递对象的问题,但不是通过引用传递对象和属性的问题。可能吗?
现在我只能通过类似这样的某种逻辑找到一种方法,这非常不方便:
let multipliers = {
none:1,
sin:2,
cos:3,
tan:4,
atan:5,
}
incMultiplier(shapesMovements[index], "rotation", "x", "sin")
function incMultiplier(shapeMovement, kind, dimension, multiplier){
var numOfKeys = Object.keys(multipliers).length;
if(kind === "rotation"){
if(dimension === "x"){
if(multiplier === "sin"){
if(shapeMovement.rotation.x.multiplier !== numOfKeys){
shapeMovement.rotation.x.multiplier += 1
}else{
shapeMovement.rotation.x.multiplier = 1
}
}
}
}
}
我只想用我投入该函数的任何对象和属性将属性值增加一。
我看过另一篇可以传递参数的帖子,但这看起来是为了组装一个新对象,而不是通过引用。我需要实际编辑对象属性的值。
最初,这是我正在尝试的,它似乎并没有在全球范围内改变对象。仅在函数本地:
incMultiplier(shapesMovements[index].rotation.x.multiplier)
function incMultiplier(multiplier){
var numOfKeys = Object.keys(multipliers).length;
if(multiplier !== numOfKeys){
multiplier = multiplier + 1
}else{
multiplier = 1
}
// always results in the same number.
// Does not keep increasing every time the function is called.
console.log(multiplier);
}
解决方案
最初,这就是我正在尝试的
您没有在那里传递具有其属性的对象。您正在传递单个属性的值,而要multiplier
执行的赋值实际上只是覆盖了函数中的局部变量。您需要传递一个对象并明确分配给它的属性:
function incMultiplier(valueObj) {
var numOfKeys = Object.keys(multipliers).length;
if (valueObj.multiplier !== numOfKeys) {
valueObj.multiplier++;
} else {
valueObj.multiplier = 1
}
}
incMultiplier(shapesMovements[index].rotation.x)
incMultiplier(shapesMovements[index].position.x)
incMultiplier(shapesMovements[index].rotation.y)
incMultiplier(shapesMovements[index].rotation.z)
没有必要传递整个shapesMovements
对象以及嵌套在其中的所有内容,传递一个可变对象就足够了。
推荐阅读
- javascript - viewer.getPlugin(PhotoSphereViewer.MarkersPlugin) 返回 null
- python - cx_Freeze:Python 错误主脚本。找不到模块错误:没有名为 pygments.lexers.python 的模块
- c# - ML.NET 是否支持带有 RBF 内核的 SVM?
- android - 颤振用户身份验证
- qt - Qt Widget 点击 2D pos 到 3D 世界坐标
- php - 将 PDO 准备好的语句放在 DB_Connector 类中的什么位置 - 在构造函数或函数中?
- git - 如何读取子模块的 .git/index 文件
- html - 如何对数字使用“unicode-range”
- python - 表格内联管理员,其中表在多个表中引用
- reactjs - 页面在设置状态后重新加载,而不是新状态,它会回到初始状态