繁体   English   中英

使用函数作为类似于C#的属性来访问私有数据是否是Javascript的一种好习惯?

[英]Is it a good practice in Javascript to use functions as C#-like properties to access private data?

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

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

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

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

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

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

像这样访问数据是个好主意吗?

我看不出任何好处,只是增加了很多样板。

如果以后需要某种吸气剂/吸气剂,则可以透明地添加它而不会破坏任何东西。

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

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

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

因此我不确定您在谈论哪种“最佳做法”。

...如果您更改了变量a和b的某些内容,则不必更改所有使用它们的代码。

但是……如果这些属性以影响其功能的方式进行更改,那么使用它的代码也必须进行更改,使用吸气剂/设置器“使其以某种方式仍能正常工作”不是一个长期的解决方案。

不,您不应该使用JavaScript编写访问器方法。 您现在不需要它们,将来也将不需要它们。 保持代码简单。

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

使代码对将来的更改更加灵活。

JavaScript支持getter和setter属性。 访问器不需要是方法,它可以使用普通的属性语法(访问和赋值)。 如果以后将数据属性更改为访问器属性,则无需采用使用它们的代码。

class Obj {
    constructor() {
        this.a = 5 
    }
    get b() {
        return this.a + 4;
    }
    set b(val) {
        this.a = val - 4;
    }
}
const inst = new Obj;
console.log(inst.a, inst.b);
inst.b = 46;
console.log(inst.a, inst.b);

暂无
暂无

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

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