无法理解ECMA6中WeakMap的行为
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=>未定义的
set
需要键和值的参数。您没有提供值,因此此代码将键为obj
的条目的值设置为undefined
。因此,对obj.weekMap.get(obj)
的下一个调用返回undefined。
相关文章:
- WeakMap是否会将我从父/子关系的内存泄漏中拯救出来
- JavaScript ecma6中的对象引用
- 为什么ES6 WeakMap's不可枚举
- 带有 ECMA6 的指令的动态控制器
- 使用 EcmaScript 中的 WeakMap 时,时序问题注意事项
- 带有 ECMA6 的 Web 组件
- AngularJS 模块与 CommonJS/ECMA6 模块
- ECMA6-在JavaScript中使用生成器函数
- 如何在ECMA6提案中按原样使用迭代器
- Need WeakMap (a, b) -> c
- 使用async方法在数组中循环只获取angular 2中的最后一个元素(ecma6)
- 如何在node.js中使用ecma6(typescript)解析Map到json
- Ecma6,Object.assign 不做深度复制
- 无法理解ECMA6中WeakMap的行为
- 在ECMA6中组合扩展
- TypeScript不能找到name Weakmap
- ECMA6中的承诺:如何修改承诺以在承诺已经在函数中返回后保持其解析值
- ES6 Set, WeakSet, Map and WeakMap
- 会不会有一个“通告”?参考应被视为“可达性”.用于WeakMap
- Ecma6禁止访问整个实例