[英]Not able to understand the behavior of WeakMap in ECMA6
在ECMA6中使用WeakMap時,我面臨着一個奇怪的場景。 我正在寫一個如下課程
'use strict';
class WeekMaptest {
constructor(options){
console.log("constructor");
this.weekMap = new WeakMap();
this._init(options);
}
_init(options) {
console.log("init called");
var privateProps = {
name: options.name,
email: options.email
};
this.weekMap.set(this, privateProps);
}
getName(){
return this.weekMap.get(this).name;
}
}
現在調用此類來實例化一個對象
var obj = new WeekMaptest({name: 'Rohit', email: 'rohit.choudhar@gmail.com'});
這是出局
console.log(obj.getName());
Output : Rohit
console.log(obj.weekMap.get(obj).name);
Output : Rohit
console.log(obj.weekMap.set(obj).name = 'I mena');
Output : I mena
console.log(obj.weekMap);
Output: WeakMap { name: 'I mena' }
console.log(obj.weekMap.get(obj).name);
Error:
/home/bll/bll-jb/server/lib/ease/testweak.js:35
console.log(obj.weekMap.get(obj).name);
^
TypeError: Cannot read property 'name' of undefined
at Object.<anonymous> (/home/bll/bll-jb/server/lib/ease/testweak.js:35:33)
at Module._compile (module.js:434:26)
at Object.Module._extensions..js (module.js:452:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:475:10)
at startup (node.js:117:18)
at node.js:951:3
我無法弄清楚WeakMap的這種行為。
我想你混淆了set
並get
。
console.log(obj.weekMap.set(obj).name = 'I mena');
此調用之前的條目:obj => obj
此調用后的條目:obj => undefined
set
期望鍵和值的參數。 您沒有提供值,因此此代碼將鍵obj
的條目值設置為undefined
。 因此,對obj.weekMap.get(obj)
的下一次調用將返回undefined。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.