Javascript 具有私有/受保护属性的ES6类

Javascript 具有私有/受保护属性的ES6类,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,我的ES6课程如下 class CoffeeMachine { constructor(power) { this._power = power; } get power() { return this._power; } } // create the coffee machine let coffeeMachine = new CoffeeMachine(100); console.log(coffeeMachine); 我有两个问题 对于consol

我的ES6课程如下

class CoffeeMachine {
  constructor(power) {
    this._power = power;
  }
  get power() {
    return this._power;
  }
}

// create the coffee machine 
let coffeeMachine = new CoffeeMachine(100);

console.log(coffeeMachine);
我有两个问题

对于console.logcoffeeMachine,我在下面; 我可以看到咖啡机的proto上有电源,也有相同的值,即100 考虑到我没有在任何地方明确设置电源,这是怎么发生的

在本例中,是否真的可以实现私有/受保护?我知道在最新的ES中有privateVar,但我想知道是否可以在这段代码中模拟它? getter和setter是,这意味着控制台中的观察者无法区分常规属性和getter/setter

考虑到我没有在任何地方明确设置电源,这是怎么发生的

我猜这就是控制台对对象的所有值求值一次,然后将这些值关联到拥有这些属性的相应对象。否则,它必须对getter进行两次评估,一次用于对象,一次用于原型,这种行为可能是不需要的

您可以在原型上手动评估getter:

类请参见{get me{return now;}}
console.logSee.prototype.me 您需要创建带有前缀的私有变量。例如:

高级咖啡机{ _权力; 建筑动力{ 这个。_power=power; } 获得权力{ 把这个还给我; } } //创建咖啡机 让咖啡机=新咖啡机100; 咖啡机; 控制台。logcoffeeMachine.\u电源;
console.logcoffeeMachine.power;我正要说。。。你所说的透明rgba0,0,0,0到底是什么意思D是否可以提供MDN参考^^@埃利亚斯补充道reference@JonasWilms那张地图很有趣!但我想这有点破坏了课程的目的,不是吗?。。我当然喜欢恨javascript:我从未使用过它。也从不需要私人财产。没有它们我很好,我认为它们可以方便地为程序员提供指导。这就是我一直使用typescript的原因。谢谢……虽然我知道这种语法,但如果您希望它们隐藏在对象中,是否可以在我的代码中进行模拟而不使用。我相信你必须使用它。有趣的是,TypeScript没有将私有字段转换成这种语法:可能是因为只有chromium似乎支持itI,这意味着公共、私有、受保护的概念只存在于程序员和编译器中,然后编译器抱怨。。。电脑不在乎。如果你告诉他访问某个类的某个内存偏移量,它就会这样做。。。因此,只要您将其视为私有的,没有错误,就应该没有问题。但也许可以试试打字稿@elias最后把typescript编译成js…@Jonaswillms I。。。别明白你的意思。。。就像我刚才描述的。访问修饰符仅用于为程序员提供方向。计算机本身并不关心。你绝对不应该将你的安全模型或类似的东西建立在访问修饰符的基础上。那么回到最初的问题,没有办法模拟私有属性吗?我在参考这一页时提到了这是如何发生的取决于console.log的实现。您在什么环境中运行此代码?
CoffeeMachine {
_power: 100,
__proto__:
power: 100
}