Typescript/JSX - 通过引用分配 class 的实例
Typescript/JSX - Assign an instance of a class by reference
本质上,我希望能够通过引用访问对象的 属性。看看下面的代码;
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 只支持对象和数组的引用传递,但是 classes 的实例呢?
我知道当 Babel 将 class 转换为普通 Javascript 时,它们被视为函数,但函数不是原始类型 - 它是一个可调用的对象,所以不是这项工作,什么是解决方案?
However, when I assign 'c' to either 'a.first' or 'a.second', it only passes by value
是的,赋值总是改变=
左边的东西的值,
在 Javascript 或 TypeScript 中无法更改它。
一种解决方法是将 属性 名称与 属性 所属的对象一起使用,而不是引用:
type Pair<T> = { first: T, second: T }
function modifyProperty(a: Pair<Point>) {
let c: keyof Pair<Point> = someBool? 'first' : 'second';
// keyof Pair<Point> type annotation means
// that only property names of Pair could be assigned to c
let newPoint = new Point(0,0);
a[c] = newPoint;
someBool = !someBool;
}
本质上,我希望能够通过引用访问对象的 属性。看看下面的代码;
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 只支持对象和数组的引用传递,但是 classes 的实例呢?
我知道当 Babel 将 class 转换为普通 Javascript 时,它们被视为函数,但函数不是原始类型 - 它是一个可调用的对象,所以不是这项工作,什么是解决方案?
However, when I assign 'c' to either 'a.first' or 'a.second', it only passes by value
是的,赋值总是改变=
左边的东西的值,
在 Javascript 或 TypeScript 中无法更改它。
一种解决方法是将 属性 名称与 属性 所属的对象一起使用,而不是引用:
type Pair<T> = { first: T, second: T }
function modifyProperty(a: Pair<Point>) {
let c: keyof Pair<Point> = someBool? 'first' : 'second';
// keyof Pair<Point> type annotation means
// that only property names of Pair could be assigned to c
let newPoint = new Point(0,0);
a[c] = newPoint;
someBool = !someBool;
}