【问题标题】:How to create methods for javascript class properties?如何为 javascript 类属性创建方法?
【发布时间】:2021-12-17 23:18:22
【问题描述】:

我可能完全误解了类的概念,但这是我想要做的。

我有很多不同的颜色,每种颜色都有自己的一组色调。每种颜色由一组 R、G、B 组成。我希望能够创建新颜色,然后访问不同格式的属性,例如 css rgba。

class Color {
  constructor(dark, light, white, id) {
    this.dark = dark;
    this.light = light;
    this.white = white;
  }
  rgba(shade, opacity = 1) {
    return `rgba(${this[shade].join(", ")}, ${opacity})`;
  }
}

const pink = new Color(
  [226, 155, 166], [240, 214, 219], [250, 245, 246]
);

//get rgba css string for a shade
console.log(pink.rgba("light"));

这可行,但能够做这样的事情来访问 css rgba 字符串会更主动。这可能吗?

const rgba = pink.light.rgba();

【问题讨论】:

  • 你应该定义一个新的类,并将这个类的属性实例化。
  • 是的,有可能,我建议你阅读developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 和一些javascript OOP 文章,我试图帮助你,但我完全不明白你的问题
  • 你真的应该有一个代表特定的单一颜色的Color 类和一个带有三种不同颜色深浅的​​Tone 类。

标签: javascript class methods constructor this


【解决方案1】:

使用另一个类或对象,并将构造函数参数转换为该参数,而不是将字符串分配给this.dark 等。

const makeShade = arr => ({
  rgba: (opacity = 1) => `rgba(${arr.join(", ")}, ${opacity})`
});

class Color {
  constructor(dark, light, white, id) {
    this.dark = makeShade(dark);
    this.light = makeShade(light);
    this.white = makeShade(white);
  }
}

const pink = new Color(
  [226, 155, 166], [240, 214, 219], [250, 245, 246]
);

//get rgba css string for a shade
console.log(pink.light.rgba());

【讨论】:

  • 这几乎就是我想要的!除了我仍然想保留我的数组以备将来使用。所以也许我可以为原版做 pink.light.rgba() 或 pink.light.hsl() 或者只是 pink.light。
  • 字符串不能有属性。如果您希望能够做到pink.light.rgba(好像.light 是一个对象),那么没有任何真正的方法可以让pink.light 引用一个字符串(一个原语)。您将需要另一个属性,例如 makeShade = arr => ({ arr, rgba: (...,然后引用 arr 属性
  • 是的,我想我明白了,我只需要 pink.light.rgba 和 pink.light.values 等...非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
  • 2021-02-08
  • 2011-04-06
  • 2021-04-07
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多