【发布时间】:2019-04-29 16:22:28
【问题描述】:
本质上,我希望能够通过引用访问对象的属性。看看下面的代码;
class Point{
x:number;
y:number;
constructor(x,y)
{
this.x=x;
this.y=y;
}
}
const a = { first: new Point(8,9), second: new Point(10,12) };
let someBool = true;
function modifyProperty(a) {
let c = someBool? a.first: a.second;
let newPoint = new Point(0,0);
c = newPoint; // Doesn't work
someBool = !someBool;
}
modifyProperty(a);
console.log(a.first);
在此示例中,每当我调用 modifyProperty() 时,我都希望在更改 'a' 中的两个属性之一之间交替更改。
但是,当我将“c”分配给“a.first”或“a.second”时,它只会按值传递。我想解决这个问题的唯一方法是让属性本身成为一个对象,如下所示:
const a = { first: {value: new Point(8,9)}, second: {value: new Point(10,12)} };
然后我会打电话给c.value = newPoint。这会起作用,但这不是一个好的解决方案,因为您必须对对象中的每个属性都这样做。
有没有更好的方法来通过引用获取这些属性?我知道 JS 只支持对象和数组的传递引用,但是类的实例呢?
我知道当 Babel 将一个类转换为普通的 Javascript 时,它们被视为函数,但函数不是原始类型 - 它是一个可调用的对象,所以这不起作用,什么是解决方案?
【问题讨论】:
标签: javascript typescript pass-by-reference jsx pass-by-value