我很好奇如何访问module.exports中的另一个对象属性.
这是案例:
module.exports = {
text: 'abcd',
index: (req, res)=>{
console.log(text) <-- is not defined
console.log(this.text) <-- undefined
}
}
那么,如何访问文本属性?谢谢你们需要你的解释.
jfriend00.. 6
Javascript没有内置方法来引用同一对象中的其他属性.有很好的理由说明为什么它不能为任何属性做这件事.因此,您要么必须确保其中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
.
Javascript没有内置方法来引用同一对象中的其他属性.有很好的理由说明为什么它不能为任何属性做这件事.因此,您要么必须确保其中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
.