参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
Javascript 的 WeakMap
对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
设定一个 WeakMap
对象, 第一个参数为键(这里是对象 o),第二个参数为值,可以为任何值包括另一个对象:
let o = {};
let w = new WeakMap().set(o, '123');
返回关联的值:
w.get(o)
"123"
检查是否含有某个键:
w.has(o)
// true
删除某个键:
w.delete(o)
利用 WeakMap
的特性我们可以实现私有属性。
const _radius = new WeakMap();
class Circle {
constructor(radius) {
// 私有属性
_radius.set(this, radius);
};
}
let c = new Circle(1);
我们这样获取私有属性的值:
const _radius = new WeakMap();
class Circle {
constructor(radius) {
// 私有属性
_radius.set(this, radius);
};
draw() {
// 获取私有属性的值
console.log(_radius.get(this));
};
}
要实现私有方法,较好的办法是使用箭头函数解决 this
绑定的问题。
const _radius = new WeakMap();
const _move = new WeakMap();
class Circle {
constructor(radius) {
// 私有属性
_radius.set(this, radius);
// 私有方法
_move.set(this, () => {
console.log('move', this);
});
}
draw() {
// 调用私有方法
_move.get(this)();
}
}
演示一下:
let c = new Circle(1);
c.draw()
// move Circle {}
现在 this
指向实例自身。
网友评论