Javascript适当的getter

Javascript适当的getter,javascript,Javascript,,它表示要将属性限制为只读,请使用get关键字。但是,我不认为添加基本上返回language属性的get lang()函数有什么意义。我的意思是,是的,你不能做像person.lang='whatever',但你可以做person.language='whatever'。如果要将字段私有化,如何使用getter而不是可写:false,正确地限制该访问 class-Foo{ #语言 构造函数(lang){ 这就是语言; } get lang(){ 返回此项。#语言; } } const f=新F

,它表示要将属性限制为只读,请使用
get
关键字。但是,我不认为添加基本上返回
language
属性的
get lang()
函数有什么意义。我的意思是,是的,你不能做像
person.lang='whatever'
,但你可以做
person.language='whatever'
。如果要将字段私有化,如何使用getter而不是
可写:false
,正确地限制该访问

class-Foo{
#语言
构造函数(lang){
这就是语言;
}
get lang(){
返回此项。#语言;
}
}
const f=新Foo(“日语”);
console.log(f.lang);

//f、 #语言=‘德语’;//错误它们不一定是为了限制访问,尽管它们可以,但它们实际上是在访问变量时运行代码的,有点像
.lang()
(我称之为thunk)的语法等价物

通过将变量限制为“只读”并禁用
defineProperty
中的
writable
属性,可以防止任何人篡改变量

如果删除对基础属性的公共访问,则实例可以充当它的访问器或代理(例如,类实例可以引用它在其中生成的私有作用域)。以这种方式,您永远无法将值写入访问器的字段,但仍然可以访问其他私有范围的变量


如果不是这样的工厂模式,我可以想象稍后通过持有私有变量的第三方定义getter函数。您还可以通过第三方:

  • 实例
  • 数据存储
  • 某种注册表可以验证实例是否经过身份验证
  • 这个第三方可以将它的getter连接到其他私有数据存储变量,而不是像工厂模式那样在实例化期间



    我相信私有化会带来额外的层,而get/set只是语法上的问题

    使用MDN文档而不是W3傻瓜来获得更详细的解释。简单的回答是,如果不在Object.defineProperty中使用约束,就无法实现。一种是通过docs和convention,您可以使用_varname来指示不应触碰案例,而只能通过getter属性使用案例。但是如果你真的想限制,那么就使用一个闭包变量并通过getter属性提供访问(使用构造函数)。好吧,您检查的答案不是
    getter
    getter
    的定义是使用类似
    someInstance.someField
    的表达式并调用函数。如果必须将
    ()
    放在末尾,则它不是getter。