当前位置: 首页 > 面试题库 >

如何将mixins添加到ES6 javascript类?

袁鸿雪
2023-03-14
问题内容

在带有一些实例变量和方法的ES6类中,如何向其添加mixin?我在下面给出了一个示例,尽管我不知道mixin对象的语法是否正确。

class Test {
  constructor() {
    this.var1 = 'var1'
  }
  method1() {
    console.log(this.var1)
  }
  test() {
    this.method2()
  }
}

var mixin = {
  var2: 'var2',
  method2: {
    console.log(this.var2)
  }
}

如果我运行(new Test()).test(),它将失败,因为method2类上没有任何内容,就像在mixin中一样,这就是为什么我需要将mixin变量和方法添加到类中的原因。

我看到有一个lodash
mixin函数https://lodash.com/docs/4.17.4#mixin,但是我不知道如何在ES6类中使用它。我可以使用lodash解决方案,甚至可以使用没有库来提供mixin功能的普通JS。


问题答案:

与大多数语言相比,Javascript的对象/属性系统具有更大的动态性,因此很容易向对象添加功能。由于函数是一类对象,因此可以完全相同的方式将它们添加到对象中。Object.assign是将一个对象的属性添加到另一个对象的方法。(它的行为在许多方面都可以与媲美_.mixin。)

Javascript中的类仅是语法糖,它使添加构造函数/原型对变得简单明了。该功能与ES6之前的代码相同。

您可以将属性添加到原型中:

Object.assign(Test.prototype, mixin);

您可以在构造函数中将其添加到创建的每个对象中:

constructor() {
    this.var1 = 'var1';
    Object.assign(this, mixin);
}

您可以根据条件将其添加到构造函数中:

constructor() {
    this.var1 = 'var1';
    if (someCondition) {
        Object.assign(this, mixin);
    }
}

也可以在创建对象后将其分配给对象:

let test = new Test();
Object.assign(test, mixin);


 类似资料:
  • 问题内容: 我想使两个按钮看起来像按钮。只有当我使用actionlink的#ID来应用时,我才能实现此目的。我想为操作链接分配一个类,但是当我使用下面的代码时,出现一个错误,提示我缺少“}”。 这是我正在应用的样式: 这可行,我想我可以将另一个#ID添加到样式中,但想将样式应用于Class。 问题答案: 您必须使用字符,因为class是C#中的关键字。这是MSDN文档的链接

  • 请帮助我,我正在创建像sublime text editor这样的软件。我想显示可用的字符集列表,下面是主要问题的图片。在这张图片中,我看到的菜单弹出窗口至少有200多个字符集,但只有显示。。。某物但是要显示所有字符集。没有为该弹出菜单添加滚动条的选项 我的软件图片有问题,请看那个红色圆圈。 请任何人帮助我如何添加滚动条到那个

  • 问题内容: 最近8个小时我一直在阅读文档,但没有发现任何可以帮助我的东西。大概是,但是没有代码在工作,因为它一直说“找不到图像URL”并引发异常。但是我还有其他项目,从来没有这个问题。 因此,有一个类包含这样的月份: 到目前为止,一切都很好。我什至可以在控制台中对其进行测试,并且效果很好,并且可以按值排序。现在,当我尝试从资源中添加图像时,出现了我之前提到的问题:找不到URL。但是,我只能使用图像

  • 问题内容: 您好,我想知道是否有人准备 将插件添加到Telegraf for Influxdb中 。我有运行的go代码。接下来我需要什么以及将这些文件放在哪里? 我发现我需要做这样的事情: 但这是我的整个Go插件还是Go中要添加到我的Go程序中的另一个文件? file.conf存储在哪里? 如果您有我需要的清单,如何组织清单,将文件存储在什么地方,或者举个例子可能会很有帮助。 谢谢!! 问题答案:

  • 我的公司使用它自己的根CA和当我试图拉图像。即使是从私人注册表中,我也会得到错误: 1H 3M 22{kubelet minikube}警告FailedSync错误同步pod,跳过:未能用ErrimagePull为“pod”进行“startcontainer”:“gcr.io/google_containers/pause-amd64:3.0的图像提取失败,这可能是因为此请求没有凭据。

  • 问题内容: 我试图找出为什么找不到使用using安装的我和/或包装器。我认为是因为它没有添加到我的PATH中: 和: 我安装使用PIP和使用,没有任何问题。我尝试重新安装,但这也没有用。我如何知道要添加的路径?只是似乎安装到的路径?那似乎是: 我还找到了本指南,该指南建议: 但是,这并不能帮助我运行。我在Mac OSX 10.7.5(Lion)上。 问题答案: 似乎我自己是几乎所有“简单”安装过程