Указатели каста на (void*)
для печати их на cout
- это правильная вещь (TM), чтобы делать на C ++, если вы хотите увидеть их значения.
Как уже отмечалось, вы могли бы использовать Object.assign
, но помните, что он присваивает все из (собственных, перечислимых) свойств возвращаемого объекта по foo
.
Чтобы избежать этого, вы можете использовать деструктуризацию:
const {x, y} = foo(arg);
this.x = x;
this.y = y;
Это не приносит вам много пользы, но ...
Вы можете комбинировать подходы:
const {x, y} = foo(arg);
Object.assign(this, {x, y});
... ценой (в теории) временного размещения объектов. (Я говорю «в теории», поскольку движок JavaScript может оптимизировать его. Но я не знаю, как это будет.)
Именно для таких ситуаций было выдвинуто это предложение. . К сожалению, это не получило никакой связи с комитетом. Если бы это предложение было реализовано, вы могли бы сделать это:
// NOT STANDARD JAVASCRIPT (the proposal hasn't even been accepted for Stage 0)
this.{x, y} = foo(arg);
Предполагая, что foo(arg)
возвращает объект только со свойствами x
и y
:
class xy {
x: number;
y: number;
constructor (arg) {
Object.assign(this, foo(arg));
}
}
Если foo
может вернуть больше свойств, вам необходимо вручную получить свойства: [ 117]
class xy {
x: number;
y: number;
constructor (arg) {
const {x, y} = foo(arg);
Object.assign(this, {x, y});
}
}