javascript - JavaScript ES6 类中的私有(private)属性

标签 javascript class ecmascript-6 private-members es2022

是否可以在 ES6 类中创建私有(private)属性?

这是一个例子。 如何防止访问 instance.property

class Something {
  constructor(){
    this.property = "test";
  }
}

var instance = new Something();
console.log(instance.property); //=> "test"

最佳答案

更新:查看其他人的回答,这已经过时了。

简短的回答,不,没有对带有 ES6 类的私有(private)属性的原生支持。

但是您可以通过不将新属性附加到对象,而是将它们保留在类构造函数中来模仿这种行为,并使用 getter 和 setter 来访问隐藏的属性。请注意,getter 和 setter 在类的每个新实例上都会重新定义。

ES6

class Person {
    constructor(name) {
        var _name = name
        this.setName = function(name) { _name = name; }
        this.getName = function() { return _name; }
    }
}

ES5

function Person(name) {
    var _name = name
    this.setName = function(name) { _name = name; }
    this.getName = function() { return _name; }
}

关于javascript - JavaScript ES6 类中的私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156326/

相关文章:

javascript - JavaScript 上的 SOAP 服务调用在 Safari 中有效,但在 Chrome 或 Firefox 中无效

javascript - 如何在 Vue JS 中设置动态样式属性

c++ - 类模板方法特化

javascript - 不要在循环中创建函数 no-loop-func Axios Request async await

javascript - 在 audiosprite 中加载错误 - 找不到模块 : 'child_process'

javascript - ReactJS - Babel 使用问题来编译 .jsx

javascript - 为什么取出代码片段 '.prototype' 会导致我的 javascript 在这里不起作用?

javascript - 使用 JavaScript 添加新的文本框

python - 在 Python 中使用 __getattr__ 更新属性?

perl - 如何在 Perl 中使类的成员成为哈希?