【发布时间】:2020-06-05 23:48:12
【问题描述】:
假设我们有以下代码:
const _timeStamp = new WeakMap();
const _running = new WeakMap();
export class Stopwatch {
constructor() {
_timeStamp.set(this, 0);
_running.set(this, false);
}
start() {
// start stopwatch
_running.set(this, true)
_timeStamp.set(this, Date.now())
}
stop() {
// stop stopwatch
_running.set(this, false);
return (Date.now() - _timeStamp.get(this))/1000
}
}
在此示例中,我们尝试使用弱图向最终用户隐藏一些信息。 根据调用的方法,我们更改两个弱图中的值。 当我们重新分配变量时,我们会改变状态。
let x = 0;
x = 10
编辑:
但是,我们不要在更新 Weakmap 中的值时更改状态,就像我们在以防万一时所做的那样变量?使用需要可重写的私有道具时,“最佳做法”是什么?
任何澄清都非常感谢!
【问题讨论】:
-
x=10不也是状态变化吗?也忽略“最佳实践”。 -
请阅读我更新的问题。正如我所指出的,这确实是一种状态变化。
-
是的。它是。那么谁说变量赋值是一种不好的做法呢? “作为最佳实践,我们不应该在 JS 中改变对象或更改状态”在没有上下文的情况下确实是零意义
-
@PieterT2000 请您提供更多上下文或解释吗?以这种方式使用 WeakMap 存储变量值对我来说似乎很不寻常。我可能希望使用实例变量。
-
@Ben 这是一个非常简化的代码示例。在实际代码中,我使用弱映射来存储私有变量,目的是使最终用户无法访问它们。 (抽象)我只是想知道当你必须像上面的例子一样在整个程序中更新它们的值时使用弱图是否正确。
标签: javascript oop javascript-objects es6-class weakmap