Как установить методы свойств верхнего уровня в конструкторе на основе вызова функции? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть конструктор в классе, который устанавливает свойства на основе аргументов, переданных при создании функции, а также при вызове другой функции на основе этих аргументов, но я столкнулся с проблемой.Я решил обойти, но должен быть более элегантный способ написать это (не каламбур).

Вот мой конструктор:

constructor(name,model,version){
// create optional parameters to set basic values
this.name = name;
this.model = model;
this.version = version;

if(model === undefined || version === undefined){
  this.make = "";
  this.model = "";
  this.version = "";
  this.prop3 = 0
  this.prop4 = 0;
  this.prop5 = 0;
}
else{
  this = getVersionAttrs(model,version); }

Этот код не работает, если я заменю this на this.what, тогда код функционирует, но устанавливает все свойства как свойства OBJECT.what, а не непосредственно OBJECT.

Я заменил оператор else следующимэто работает:

else{
  temp = getVersionAttrs(model,version);
  for(var x in temp){ this[x] = temp[x]; }
}

Кто-нибудь знает, как присвоить этот объект, который я получаю от функции getVersionAttrs(), объекту, который создается?Ака свойства возвращаемого объекта должны стать свойствами создаваемого объекта.

Заранее спасибо, я почесал голову над этим.

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Я не совсем уверен, что вы пытаетесь сделать здесь, но из того, что я вижу, я считаю, что вам нужно настроить что-то простое:

constructor(name, model=null, version=null){      
  if (!model || !version) {
     var {model, version} = getVersionAttrs(model, version);
  }

  this.name = name;
  this.model = model;
  this.version = version;
}

Предполагая, getVersionAttrs(model, version) возвращает что-то вроде {model: 'model', version: 'version' }

0 голосов
/ 11 мая 2018

Хахаха, это типично неправильно. Позвольте нам рассмотреть ваш код

this = getVersionAttrs(model,version);

Полагаю, вы хотите Object.assign это значение, но вы повторно присваиваете это значение.

Итак, ниже приведено простое решение, о Object.assign

this = Object.assign({}, this, getVersionAttrs(model,version))

Также вы можете использовать lodash или другие аналогичные API.

0 голосов
/ 11 мая 2018

Не пытайтесь переназначить this. Если getVersionAttrs возвращает объект со свойствами, которые вы хотите добавить к this, вы должны использовать Object.assign вместо:

else {
  Object.assign(this, getVersionAttrs(model, version));
}

class MyClass {
  constructor() {
    Object.assign(this, { foo: 'foo' });
  }
}
console.log(new MyClass());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...