【发布时间】:2023-03-04 12:13:01
【问题描述】:
我有一个如下的 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);
我有 2 个问题;
- 对于console.log(coffeeMachine),我得到以下;
CoffeeMachine { _power: 100, __proto__: power: 100 }
我可以看到“power”在 CoffeeMachine 的 proto 上,并且具有相同的值,即 100 考虑到我没有在任何地方明确设置“电源”,这是怎么发生的?
- 在这个例子中真的可以实现私有/受保护吗?我知道最新的 ES 中有 #privateVar,但想知道是否可以在这段代码中模拟它?
【问题讨论】:
-
我的意思是公共,私有,受保护的概念只存在于程序员和编译器然后抱怨......计算机不在乎。如果您告诉他访问某个类的某个内存偏移量,它就会这样做...所以只要您将其视为
private,只要没有错误,就应该没有问题^^。但也许试试打字稿? :) -
@elias 鉴于 typescript 最终被编译为 js ...
-
@JonasWilms 我......不明白你的意思......就像我刚刚描述的那样。访问修饰符只是为程序员提供方向。计算机本身并不关心。而且您绝对不应该将您的安全模型或类似的东西基于访问修饰符。
-
所以回到最初的问题,有没有办法模拟“私有”属性...我指的是这个页面以供参考javascript.info/private-protected-properties-methods
-
"这是怎么发生的?" - 取决于
console.log的实现。你是在什么环境下运行这段代码的?
标签: javascript ecmascript-6 es6-class