javascript - Typescript 私有(private) setter 公共(public) getter 约定

标签 javascript typescript

<分区>

所以我想要一个不可变的 Vector 类。为此,我需要一个用于 x 和 y 坐标的公共(public) getter 和一个私有(private) setter,以便我可以在构造函数中实际初始化这些值。

我有几个可供选择的选项,所以我想知道哪个符合惯例。

我可以这样做:

class Vector {
    constructor(private _x: number, private _y: number) { }
    public get x() {
        return this._x;
    }

    public get y() {
        return this._y;
    }
}

但我不知道使用下划线是否很常见。这可能是一个问题,因为该名称将在智能感知中可见。

第二个选项可能是

class Vector {
    constructor(private x: number, private y: number) { }
    public get X() {
        return this.x;
    }

    public get Y() {
        return this.y;
    }
}

据我所知,在 JS 中只有类以大写开头,所以这也可能不是一个好主意。

处理此问题的首选方法是什么?

最佳答案

目前的普遍共识是使用下划线。私有(private)变量不会在类外的自动完成中显示 - 因此您不会在 Vector< 实例的自动完成中看到 _x_y/。您唯一会看到它们的地方是在调用构造函数时,如果这真的冒犯了您,您可以避免自动映射(尽管我宁愿使用自动映射)。

class Vector {
    private _x: number;
    private _y: number;

    constructor(x: number, y: number) { 
        this._x = x;
        this._y = y;
    }

    public get x() {
        return this._x;
    }

    public get y() {
        return this._y;
    }
}

var vector = new Vector(1, 2);

目前还没有官方标准——但如果有任何机会与外部代码交互,最好遵循 JavaScript 风格的命名约定,因为它可以避免根据您是否调用“”来回切换约定我们创造的功能”或“他们创造的功能”。

仅在情况下避免差异也是 Steve McConnell 在 Code Complete 中的建议 - 这是针对 xX 的另一个缺点以及您提到的命名约定点在问题中。

关于javascript - Typescript 私有(private) setter 公共(public) getter 约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683291/

相关文章:

reactjs - typescript react : How to override default html input element attribute prop types

javascript - 使用 javascript/jquery 居中左对齐文本

Monorepo 中的 typescript eslint tsconfig 解析错误

typescript - Webpack 排除规范文件

javascript - 使用parentsUntil或不使用parentUntil在 TreeView 中触发单击事件来搜索节点

angular - NPM 包 : Referring to assets within the package

typescript - Eslint 'rxjs/operators' 应该在项目的依赖项中列出

javascript - 如何在javaScript中添加变量作为json键

javascript - 如何使用特定值将 json 数组转换为 javascript 数组

javascript - 即使成功,Ajax 也没有给出响应