weakmap.set(键,值);
key.value=值;
weakmap.set(键,值);
key.value=值;
WeakMap(弱点地图)
var obj=获取对象源库();
函数useObj(obj){ 用(obj)做某事; }
var-map=新map();// 贴图可以有对象关键点 函数useObj(obj){ 用(obj)做某事; var调用=map.get(obj)|0; 调用++;// 又打了一次电话 if(调用>10)report();// 报告调用超过10次 map.set(对象,称为); }
var-map=新的WeakMap();// 创建弱映射 函数useObj(obj){ 用(obj)做某事; var调用=map.get(obj)||0; 调用++;// 又打了一次电话 if(调用>10)report();// 报告调用超过10次 map.set(对象,称为); }
process.on('unhandledRejection',函数(reason,p){ console.log(“Unhandled Rejection at:Promise”,p,“reason:”,reason); //特定于应用程序的日志记录、引发错误或其他逻辑 });
使用对象
地图
WeakMap(弱点地图)
WeakMap(弱点地图)
打电话
承诺例外地图
var listenableMap=新的WeakMap(); 导出函数getListenable(对象){ if(!listenableMap.has(object)){ listenableMap.set(对象,{}); } return listenableMap.get(object); } 导出函数getListeners(对象,标识符){ var listenable=getListenable(对象); listenable[identifier]=可侦听[identififier]|[]; 返回可侦听的[identifier]; } 上的导出函数(对象、标识符、侦听器){ var listeners=getListeners(对象,标识符); listeners.push(listener); } 导出函数removeListener(对象、标识符、侦听器){ var listeners=getListeners(对象,标识符); var index=监听器.indexOf(监听器); if(索引!==-1){ 侦听器。拼接(索引,1); } } 导出函数emit(对象、标识符…参数){ var listeners=getListeners(对象,标识符); for(监听器的var监听器){ listener.apply(对象,参数); } }
var-map=新的WeakMap(); var pavloHero={first:“Pavlo”,last:“Hero”}; var gabrielFranco={first:“Gabriel”,last:“Franco”}; map.set(pavloHero,“这是英雄”); map.set(gabrielFranco,“这是Franco”); console.log(map.get(pavloHero))// 这是英雄
var剧院座位=(function(){ var priv=新的WeakMap(); var=函数(实例){ return priv.get(实例); }; return(函数(){ 函数TheatreSeatsConstructor(){ var privateMembers={ 座位:[] }; priv.set(this,privateMembers); this.maxSize=10; } TheatreSeatsConstructor.prototype.placePerson=功能(人){ _(本).座位.推(人); }; TheatreSeatsConstructor.prototype.countOccupiedSeats=功能(){ 返回_(本).座位.长度; }; TheatreSeatsConstructor.prototype.isSaldOut=函数(){ return _(this).seats.length>=this.maxSize; }; TheatreSeatsConstructor.prototype.countFreeSeats=函数(){ return this.maxSize-_(this).seats.length; }; return TheatreSeatsConstructor; }()); })()
var elements=document.getElementsByTagName('*'), i=-1,len=元件长度; while(++i!==长度){ //写得这么糟糕的生产代码让我想哭: 元素[i].lookupindex=i; 元素[i].elementref=[]; elements[i].elementref.push(elements[(i*i)%len]); } //然后,您可以访问查找索引的 //对于那些刚接触javascirpt的人,我希望下面的评论能够帮助解释 //三元运算符(?:)如何像内联if语句一样工作 文档.write(document.body.lookupindex+“<br/>”+( (document.body.elementref.indexOf(document.currentScript)!==- 1) ? // if(document.body.elementref.indexOf(document.currentScript)!==- 1){ “正确” ://}其他{ “假” ) // } );
var DOMref=新的WeakMap(), __DOMref_value=数组, __DOMref_lookupindex=0, __DOMref_otherelement=1, elements=document.getElementsByTagName('*'), i=-1,len=元素长度,cur; while(++i!==长度){ //写得这么好的生产代码让我想 😊: cur=DOMref.get(元素[i]); if(cur===未定义) DOMref.set(元素[i],cur=新__DOMref_value) cur[__DOMref_lookupindex]=i; cur[__DOMref_otherelement]=新的WeakSet(); cur[__DOMref_otherelement].add(元素[(i*i)%len]); } //然后,您可以访问lookupindex的 cur=DOMref.get(document.body) document.write(cur[__DOMref_lookupindex]+'<br/>'+( cur[__DOMref_otherelement].has(document.currentScript) ? // if(cur[__DOMref_otherelement].has(document.currentScript)){ “正确” ://}其他{ “假” ) // } );
元素
元素
元素
“”+真
//从此处使用immutable.js https://facebook.github.io/immutable-js/ const-memo=新WeakMap(); 让myObj=不变。 地图({a:5,b:6}); 函数someLongComputeFunction(someImmutableObj){ //如果我们保存了值,则返回它 if(memor.has(someImmutableObj)){ console.log('已使用备忘录!'); return memo.get(someImmutableObj); } //否则计算、设置并返回 const computedValue=someImmutableObj.get('a')+someImMUtableOb2.get(‘b'); memo.set(someImmutableObj,computedValue); console.log(“计算值”); return computedValue; } someLongComputeFunction(myObj); someLongComputeFunction(myObj); someLongComputeFunction(myObj); //重新指派 myObj=不变。 地图({a:7,b:8}); someLongComputeFunction(myObj);
<script src=“ https://cdnjs.cloudflare.com/ajax/libs/inmunitable/3.8.1/immutable.min.js “></script>
/** 具有通用属性的基本用户对象。 */ 功能用户(用户名、全名、年龄、性别){ this.username=用户名; this.fullname=全名; this.age=年龄; this.gender=性别; this.print=()=>console.log(`${this.fullname}是${age}岁的${gender}`); }
/** 用户集合,由用户名键入。 */ var users=新映射();
/** 创建用户对象并将其添加到用户集合。 */ var addUser=(用户名、全名、年龄、性别)=>{ 让an_user=新用户(用户名、全名、年龄、性别); users.set(用户名,an_user); } /** 返回与集合中给定用户名关联的用户对象。 */ var getUser=(用户名)=>{ return users.get(用户名); } /** 删除与集合中给定用户名关联的用户对象。 */ var deleteUser=(用户名)=>{ users.delete(用户名); } /** 打印集合中所有用户对象的摘要。 */ var printUsers=()=>{ users.forEach((用户)=>{ user.print(); }); }
/* 社交媒体平台(SMP)的WeakMaps。 可以替换为一个可以增长的地图 基于不同的SMP名称。 无论如何。。。 */ var sm_platform_twitter=新的WeakMap(); var sm_platform_facebook=新的WeakMap(); var sm_platform_linkedin=新的WeakMap();
/** 返回给定SMP的WeakMap。 */ var getSMPWeakMap=(sm_platform)=>{ if(sm_platform==“推特”){ 返回sm_platform_twitter; } else if(sm_platform==“Facebook”){ 返回sm_platform_facebook; } else if(sm_platform==“LinkedIn”){ 返回sm_platform_linkedin; } 返回未定义; }
/** 添加与给定用户关联的SMP链接。 用户必须已添加到集合中。 */ var addUserSocialMediaLink=(用户名,sm_platform,sm_link)=>{ let user=getUser(用户名); 让sm_platform_weakmap=getSMPWeakMap(sm_platform); if(用户&&sm_platform_weakmap){ sm_platform_weakmap.set(用户,sm_link); } }
/** 仅打印给定SMP上的用户的全名和相应的SMP链接。 */ var printSMPUsers=(sm_platform)=>{ 让sm_platform_weakmap=getSMPWeakMap(sm_platform); console.log(`${sm_platform}:`的用户) users.forEach((用户)=>{ if(sm_platform_weakmap.has(用户)){ console.log(`\t${user.fullname}:${sm_platform_weakmap.get(user)}) } }); }
让yusuf={name:“yusuf”}; 让map=新map(); map.set(yusuf,“xyz”)// 这里“yusuf”是键,“xyz”是值 yusuf=空;// 覆盖引用 //yusuf先前引用的对象存储在数组中 //因此它不会被垃圾收集 //我们可以使用map.keys()获得它
让yusuf={name:“yusuf”}; let map=新的WeakMap(); map.set(优素福,“…”); yusuf=空;// 覆盖引用 //尤素夫已从记忆中消失!
weakMap.set(yusuf,“秘密文件”); //如果优素福死了,秘密文件将自动销毁
const aNormalMap=新贴图(); 函数pushToMap(){ for(设i=0;i<10;i++){ aNormalMap.set({},i); } } const aWeakMap=新WeakMap(); 函数pushToWeakMap(){ for(设i=0;i<10;i++){ aWeakMap.set({},i); } } 函数main(){ pushToMap(); /** *调用pushToMap后 */ pushToWeakMap(); /** *调用pushToWeakMap后 */ }