9.1.8 代理的问题与不足
1. 代理中的 this
const wm = new WeakMap();
class User {
constructor(userId) {
wm.set(this, userId);
}
set id(userId) {
wm.set(this, userId);
}
get id() {
return wm.get(this);
}
}
const user = new User(123);
console.log(user.id); // 123
console.log(userInstanceProxy.id); // undefined
这是因为 User 实例一开始使用目标对象作为 WeakMap 的键,代理对象却尝试从自身取得这个实
例。要解决这个问题,就需要重新配置代理,把代理 User 实例改为代理 User 类本身。之后再创建代
理的实例就会以代理实例作为 WeakMap 的键了:文章来源:https://www.toymoban.com/news/detail-667449.html
const UserClassProxy = new Proxy(User, {});
const proxyUser = new UserClassProxy(456);
console.log(proxyUser.id);
刚开始自己不懂什么意思,userInstanceProxy和user中的this是它们自己本身,但是userInstanceProxy不等于user。map中存的键值是user不是userInstanceProxy,所以拿不到值。其实和WeakMap没有任何关系,用map存值也会有这种问题。文章来源地址https://www.toymoban.com/news/detail-667449.html
到了这里,关于红宝石阅读笔记--第九章 代理与反射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!