Javascript 如何通过引用复制对象属性 physicsObjects.forEach(obj=>{ 设coor=obj坐标; 设vel=obj.速度; obj.coordinates=addVectors(coor[0.1,0.1]); })

Javascript 如何通过引用复制对象属性 physicsObjects.forEach(obj=>{ 设coor=obj坐标; 设vel=obj.速度; obj.coordinates=addVectors(coor[0.1,0.1]); }),javascript,Javascript,这将获得引用 physicsObjects.forEach(obj=>{ 设coor=obj坐标; 设vel=obj.速度; coor=addVectors(coor[0.1,0.1]); }) 这只会改变“coor”。我尝试过创建一个临时对象,并用临时对象替换原来的对象,但这不是一种直接的方法 如何通过引用访问对象属性?除了像第一个例子中那样直接访问它之外,我的意思是。我现在才需要这个,做object.property.property.property=someValue可能会很痛苦。是否

这将获得引用

physicsObjects.forEach(obj=>{ 设coor=obj坐标; 设vel=obj.速度; coor=addVectors(coor[0.1,0.1]); }) 这只会改变“coor”。我尝试过创建一个临时对象,并用临时对象替换原来的对象,但这不是一种直接的方法

如何通过引用访问对象属性?除了像第一个例子中那样直接访问它之外,我的意思是。我现在才需要这个,做
object.property.property.property=someValue可能会很痛苦。是否有一个javascript等价物:

var*objectProperty=&someobject.someproperty;
您可以使用语法,但不建议这样做,因为

不建议使用with语句,因为它可能会导致混淆错误和兼容性问题

const foo={
数据:{
用户:{
名字:“爱丽丝”,
年龄:18
}
}
};
使用(foo.data.user){
name='Bob';
年龄=24岁;
}
console.log(foo)您可以使用语法,但不建议这样做,因为

不建议使用with语句,因为它可能会导致混淆错误和兼容性问题

const foo={
数据:{
用户:{
名字:“爱丽丝”,
年龄:18
}
}
};
使用(foo.data.user){
name='Bob';
年龄=24岁;
}

console.log(foo)也许JavaScript中更惯用的方法是利用
这个
和作用域:

function addVectors(vector) {  // Use only the *second* argument, like [0.1, 0.1], not 'coor')
    let newCoordinates = /* do same calculations as you did */

    // Instead of *return newCoordinates;* at the end: 
    this.coordinates = newCoordinates;
}


// Approach 1:
// Now "bind" the function inside the object, so that "this" refers to it. 

let objExample = {
   velocity: 42,
   coordinates: [1.2, 3.4],
   add: addVectors,
}

// use it like this (in your foreach for instance):
objExemple.add([0.1, 0.1]);



// Approach 2:
// Use 'call' to bind the 'this' parameter to the object dynamically
// (directly in your foreach without any more changes)
addVectors.call(obj, [0.1, 0.1]); 

对于您给出的示例,我选择方法2,所需的代码更少


如果您在不同的地方重用这个“addVectors”函数,那么使用方法1是有意义的。

也许JavaScript中更惯用的方法是使用
这个
和作用域:

function addVectors(vector) {  // Use only the *second* argument, like [0.1, 0.1], not 'coor')
    let newCoordinates = /* do same calculations as you did */

    // Instead of *return newCoordinates;* at the end: 
    this.coordinates = newCoordinates;
}


// Approach 1:
// Now "bind" the function inside the object, so that "this" refers to it. 

let objExample = {
   velocity: 42,
   coordinates: [1.2, 3.4],
   add: addVectors,
}

// use it like this (in your foreach for instance):
objExemple.add([0.1, 0.1]);



// Approach 2:
// Use 'call' to bind the 'this' parameter to the object dynamically
// (directly in your foreach without any more changes)
addVectors.call(obj, [0.1, 0.1]); 

对于您给出的示例,我选择方法2,所需的代码更少


如果您在不同的位置重用此“addVectors”函数,那么使用方法1是有意义的。

也许您可以将函数
addVectors
绑定到对象本身,并使用
this.coor
引用
coor
,而不是将其作为参数传递。如果属性的值是一个基元,只能引用值。请参阅创建一个getter,它可以像引用一样返回值。我对此没有严重的问题,我只是在尝试。谢谢你的提示。感觉很奇怪,你可以通过引用得到一个对象,但是你不能得到一个对象属性引用。另外,你在这里重新分配
coor
变量。也许你想让你的
addVectors
改变作为参数传递的对象
coor
。@AliMertCakar是的,你可以通过引用获取对象,但不能获取对变量的引用。与属性相同,您可以获取对存储在属性中的对象的引用(只要它是一个对象),但不能引用属性本身。您可以将函数
addVectors
绑定到对象本身,并使用
this.coor
引用
coor
,如果属性的值是基元,则只能引用值。请参阅创建一个getter,它可以像引用一样返回值。我对此没有严重的问题,我只是在尝试。谢谢你的提示。感觉很奇怪,你可以通过引用得到一个对象,但是你不能得到一个对象属性引用。另外,你在这里重新分配
coor
变量。也许你想让你的
addVectors
改变作为参数传递的对象
coor
。@AliMertCakar是的,你可以通过引用获取对象,但不能获取对变量的引用。与属性相同,您可以获取对存储在属性中的对象的引用(只要它是对象),但不能引用属性本身。谢谢。顺便说一句,这是不推荐的。谢谢。顺便说一句,它已经被弃用了