javascript中对象冻结内的引用常量

javascript中对象冻结内的引用常量,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,在selectors.page2Data.\u 3txtFamilyName中分配myData.firstName的正确方法是什么: 有可能吗 module.exports = Object.freeze({ myData: { firstName : 'first', lastName : 'last ', streetNum : 'number', }, selectors:{ page2Data:{ _3txtFamilyName: fun

在selectors.page2Data.\u 3txtFamilyName中分配myData.firstName的正确方法是什么: 有可能吗

module.exports = Object.freeze({
myData: {
    firstName : 'first',
    lastName : 'last ',
    streetNum : 'number',
},
selectors:{
    page2Data:{

        _3txtFamilyName: function(){ return myData.firstName},
        _4txtgivenName:  function(){this.myData.lastName},
        _5txtAddressStreetNo:  function(){this.myData.streetNum} ,


    }
}
});

简单的方法是将整个对象分配给一个变量,并根据需要在内部使用该变量。然后导出该变量

const obj=Object.freeze({
我的数据:{
名字:'第一',
},
选择器:{
第2页数据:{
_3txtFamilyName:函数(){
返回obj.myData.firstName
}
}
}
})
//module.exports=obj

console.log(obj.selectors.page2Data.\u 3txtFamilyName())
此对象的组织结构使得使用这些函数非常不方便<代码>这些函数中的此将引用
page2Data
对象,而不是主父对象。因此,使用
this.myData
将在这些函数中返回未定义

如果您绝对无法将其更改为更方便的对象,则可以使用
call()
调用函数并传入外部对象。但这是一种相当丑陋的方式:

让e=Object.freeze({
我的数据:{
名字:'第一',
},
选择器:{
第2页数据:{
_3txtFamilyName:函数(){
this.myData.firstName=“标记”
},
}
}
});
e、 selectors.page2Data.\u 3txtFamilyName.call(e)//为此传递显式值

console.log(e.myData)
在当前上下文中执行此操作的最佳方法是执行以下操作:

module.exports = Object.freeze({
    myData: {
        firstName : 'first',
        lastName : 'last ',
        streetNum : 'number',
    },
    selectors:{
        page2Data:{

            _3txtFamilyName: function(){
                return module.exports.myData.firstName
            },
            _4txtgivenName:  function(){
                return module.exports.myData.lastName
            },
            _5txtAddressStreetNo:  function(){
                return module.exports.myData.streetNum
            } ,


        }
    }
});