javascript - 在 Javascript 中使用函数作为类似 C# 的属性来访问私有(private)数据是一个好习惯吗?

标签 javascript

例如,考虑具有数据变量 a 和 b 的类 Obj,以及它们的访问器 A() 和 B():

class Obj 
{
    constructor () 
    {
         this.a = 5
         this.b = 9 
    }

    A () { return a }
    SetA ( value ) { this.a = value }
    B () { return b }
}

这个想法是将接口(interface)与实现分开,使代码对于 future 的变化更加灵活。因此,如果您更改变量 a 和 b 的某些内容,则不必更改使用它们的所有代码。

但我担心它可能会产生大量开销,因为它不会像其他语言那样进行优化。另外,函数是 Javascript 中的一等公民,因此调用它们很复杂。

像这样访问数据是个好主意吗?或者应该避免这种情况以及如何避免?

最佳答案

Is it a good idea to access data like this?

我没有看到任何好处,它只是增加了很多样板。

如果您稍后需要某种 getter/setter,您可以透明地添加它,而不会破坏任何内容。

{ example: "test", }
// can be turned into
{ 
  get example() { /*..*/ },
  set example(v) { /*...*/ },
 }

据我所知,这同样适用于 C#:

 string example
 // can be turned to
 string example {
   get {
     //...
   }
 }

所以我不确定您在谈论哪种“最佳实践”。

... if you change something about variables a and b, you don't have to change all the code that uses them.

但是……如果这些属性的变化影响了它们的功能,那么使用它的代码也必须改变,使用 getter/setter 来“让它仍然以某种方式工作”并不是一个长期的解决方案。

关于javascript - 在 Javascript 中使用函数作为类似 C# 的属性来访问私有(private)数据是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54971472/

相关文章:

javascript - 替换 ul 列表子元素

javascript - 从 NodeJs 串口读取数据

javascript - Windows 上的 NodeJS 0.6.10 中的 Bogart 无法启动,并显示有关 'sys' 模块的消息

javascript - 生产服务器中的 MomentJS 给了我一个不同的 unix 时间戳

javascript - bootstrap Accordion 图标在点击时发生变化

javascript - IE中图片有时会掉到页面底部

javascript - 如何启用两个按钮可点击?

javascript - 为什么删除元素比添加元素花费更多时间?

JavaScript 对象;访问 json 数组时出现问题

javascript - Mootools存储方法: Where is the data stored?