首页 > 解决方案 > 如何在基于函数调用的构造函数中设置顶级属性方法?

问题描述

我在一个类中有一个构造函数,它根据创建函数时传递的参数以及基于这些参数对另一个函数的调用来设置属性,但我遇到了一个问题。我已经解决了一个问题,但必须有一种更优雅的方式来写这个(不是双关语)。

这是我的构造函数:

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); }

此代码不起作用,如果我替换thisthis.whatthen 代码函数,但将所有属性设置为 OBJECT.what 的属性,而不是直接的 OBJECT。

我已将 else 语句替换为以下有效的语句:

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

有谁知道如何将我从函数返回的这个对象分配给getVersionAttrs()正在创建的对象?返回对象的 Aka 属性应该成为正在创建的对象的属性。

在此先感谢,我一直在为这个问题挠头。

标签: javascriptconstructor

解决方案


不要尝试重新分配this. 如果getVersionAttrs返回具有要添加到的属性的对象this,则应Object.assign改用:

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

class MyClass {
  constructor() {
    Object.assign(this, { foo: 'foo' });
  }
}
console.log(new MyClass());


推荐阅读