Как установить несколько свойств класса для свойств одного объекта - PullRequest
0 голосов
/ 18 января 2019

Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу вызывать функцию, которая возвращает оба свойства дважды, вместо этого я в основном хочу сделать это:

class xy {
   x: number;
   y: number;

   constructor (arg) {
       { this.x, this.y } = foo(arg); //this function returns an object with two properties
   }

}

Вместо этого:

class xy {
   x: number;
   y: number;

   constructor (arg) {
       this.x = foo(arg).x;
       this.y = foo(arg).y;
   }
}

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Как уже отмечалось, вы могли бы использовать 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);
0 голосов
/ 18 января 2019

Предполагая, foo(arg) возвращает объект только с x и y свойствами:

class xy {
   x: number;
   y: number;

   constructor (arg) {
       Object.assign(this, foo(arg));
   }
}

Если foo может вернуть больше свойств, вам нужно вручную получить свойства:

class xy {
   x: number;
   y: number;

   constructor (arg) {
       const {x, y} = foo(arg);
       Object.assign(this, {x, y});
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...