我写了一些通过使用azure service
具有私有变量的类。为此,我在类文件的顶部放置了一个WeakMap()
。
light.js
WeakMap
这很好用,我能够添加一些具有验证和类型检查的getter和setters。
现在,我想将该类扩展到另一个类,但是在子类和父类文件之间共享私有属性信息时遇到麻烦。
flashingLight.js
let privateVars = new WeakMap();
class Light {
constructor(state, brightness) {
let info = {"state": state, "brightness": brightness, "createdAt": Date.now()};
// Save info into privateVars
privateVars.set(this, info);
}
switch() {
let info = privateVars.get(this);
info.state = !info.state;
privateVars.set(this, info);
}
}
从let privateVars = new WeakMap();
let flashing;
import Light from './light.js';
class FlashingLight extends Light {
constructor(state=false, brightness=100, flashMode=true) {
super(state, brightness);
let info = {"state": state, "brightness": brightness, flashMode: flashMode, "createdAt": Date.now()};
privateVars.set(this, info);
if(flashMode===true) {
this.startFlashing();
}
}
startFlashing() {
flashing = setInterval(this.lightSwitch,5000);
}
}
内部的this.lightSwitch
函数调用setInterval
时,它无法访问对象的状态。
startFlashing
这是因为这些功能分散在两个文件中吗?无论如何,我可以同时使用私有变量和类扩展吗?
答案 0 :(得分:2)
您的问题之一是在传递函数时使用setInterval。调用该函数时,this
不是您所期望的。您可以使用bind强制它成为您想要的,例如setInterval(this.lightSwitch.bind(this),5000)