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 類本身。之后再創(chuàng)建代
理的實例就會以代理實例作為 WeakMap 的鍵了:文章來源:http://www.zghlxwxcb.cn/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沒有任何關(guān)系,用map存值也會有這種問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-667449.html
到了這里,關(guān)于紅寶石閱讀筆記--第九章 代理與反射的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!