繁体   English   中英

模块中的私有方法和普通函数

[英]Private method and normal function in a module

考虑到我有以下模块:

class Rectangle {
  private width: number;
  private height: number;

  constructor(w: number, h: number) {
    this.width = w;
    this.height = h;
  }

  private area(): number {
    return w * h;
  }

  public show(): void {
    console.log(`${w} X ${h} = ${this.area()}`);
  }
}

export default Rectangle;

如您所见, area方法设置为private ,因此我可以将其移出类并将其转换为普通函数。 因为我不导出它,无法从外部代码访问它。

const area = (w: number, h: number): number => w * h;

class Rectangle {
  private width: number;
  private height: number;

  constructor(w: number, h: number) {
    this.width = w;
    this.height = h;
  }

  public show(): void {
    console.log(`${w} X ${h} = ${area(this.width, this.height)}`);
  }
}

export default Rectangle;

如果我这样做,每次我new Rectangle类时,都不会再次创建该area ,因此我的Rectangle对象将比具有private方法的对象更轻量级。 我对么? 我应该这样做还是坚持原来的 OOP 方式?

如果我这样做,每次我new Rectangle类时,都不会再次创建该area ,因此我的Rectangle对象将比具有private方法的对象更轻量级。 我对么?

不,你不是。 类的方法存储实例原型中。 它不是存储在每个实例中。 对性能或内存没有影响。

我应该这样做还是坚持原来的 OOP 方式?

我个人更喜欢在类之外声明独立的函数。 这是一种功能方法 但这是编码风格的问题。

注意:如果你坚持 OOP 范式,当一个方法不使用this它应该是static

这不会改变对象的重量,因为它在对象原型上。 但是如果这个方法不依赖于类属性,那么它应该/可以是静态的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM