我很好奇如何在module.exports中访问另一个对象属性。
这是一个例子:
module.exports = {
text: 'abcd',
index: (req, res)=>{
console.log(text) <-- is not defined
console.log(this.text) <-- undefined
}
}
我很好奇如何在module.exports中访问另一个对象属性。
这是一个例子:
module.exports = {
text: 'abcd',
index: (req, res)=>{
console.log(text) <-- is not defined
console.log(this.text) <-- undefined
}
}
this
具有正确的对象值,或者将适当的对象引用保存在可以访问它的位置。let myObj = {
text: 'abcd',
index: (req, res)=>{
console.log(myObj.text)
}
}
module.exports = myObj;
.index()
将始终作为方法正确调用在您的module.exports
上(这将是通常情况),那么您可以停止使用=>
定义并使用普通的function
定义(应该几乎总是用于方法声明),然后this
将具有所需的值。module.exports = {
text: 'abcd',
index: function(req, res) {
console.log(this.text)
}
}
.index()
索引,它就能正常运作:let myModule = require('myModule');
myModule.index(req, res);
人们倾向于爱上箭头语法,并忘记它几乎永远不应该用于方法定义,因为它不会将this
设置为创建对象的主机对象,这会给方法带来问题。相反,对于对象的方法,应使用常规的function
定义。
箭头函数通常非常有用于回调函数,其中您希望回调函数可以访问来自环境的this
值(称为该值的词法值this
)。以下是一些有用的示例:
class Timer {
delay(t, cb) {
this.timer = setTimeout(() => {
// preserve this value inside a callback
this.timer = null;
cb();
})
}
}
或者
// preserve this value inside a callback
let filtered = myArray.filter(item => {
return item.id !== this.master.id;
});
另一方面,你几乎永远不想使用箭头声明来定义一个方法,因为这会覆盖this
的通常对象值,并用词法值替换它。
this
值是词法的,而不是从调用函数的方式中确定的情况。在您的情况下,this的词法值是模块顶层的任何this
值,而不是您的对象。您可以将词法this视为定义此代码时this的值是什么。这显然不是您想要的,因此箭头语法不适用。当指定回调函数并希望在回调内保留词法this
值时,箭头语法通常非常适用。 - jfriend00function
声明(在 ES5 和更早的版本中,我们都可以很好地使用它)。当您知道如何使用箭头函数时,箭头语法非常有用。 - jfriend00试试这个
module.exports = {
text: 'abcd',
index: function (req,res) {
console.log(this.text)
}
}
通过访问
var te=require('modulename')
te.index()
this
。 - Felix Klingindex
的箭头语法,这也是我回答的内容。当你在我回答后编辑了问题,你破坏了整个问题/答案的意义。请不要这样做。我建议你将问题恢复到最初提出的方式,这样答案仍然相关。如果你想要进一步的信息,请尝试通过评论获取信息,或者提出一个新的/不同的问题。 - jfriend00