簡體   English   中英

無法理解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的這種行為。

我想你混淆了setget

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM