在selectors.page2Data._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} ,
}
}
});
答案 0 :(得分:0)
简单的方法是将整个对象分配给一个变量,然后根据需要在内部使用该变量。然后导出该变量
const obj = Object.freeze({
myData: {
firstName: 'first',
},
selectors: {
page2Data: {
_3txtFamilyName: function() {
return obj.myData.firstName
}
}
}
})
//module.exports = obj
console.log(obj.selectors.page2Data._3txtFamilyName())
答案 1 :(得分:0)
此对象的组织使其使用功能非常不便。这些函数中的this
将引用page2Data
对象,而不是主要的父对象。因此,使用this.myData
将在这些函数中返回undefined。
如果您绝对不能将其更改为更方便的对象,则可以使用call()
调用函数并传入外部对象。但这是一种非常丑陋的方式:
let e = Object.freeze({
myData: {
firstName: 'first',
},
selectors: {
page2Data: {
_3txtFamilyName: function() {
this.myData.firstName = "mark"
},
}
}
});
e.selectors.page2Data._3txtFamilyName.call(e) // pass in explicit value for this
console.log(e.myData)
一种替代方法是将selectors
更改为getter函数。这将允许您捕获封闭中的外部对象:
let e = Object.freeze({
myData: {
firstName: 'first',
},
get selectors() { // getter instead of plain object
let self = this // capture this
return {
page2Data: {
_3txtFamilyName: function() {
self.myData.firstName = "mark"
},
}
}
}
});
// now you can call it normally
e.selectors.page2Data._3txtFamilyName(e)
console.log(e.myData)
答案 2 :(得分:0)
在当前环境下执行此操作的最佳方法是执行以下操作,
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
} ,
}
}
});