当前位置:  开发笔记 > 编程语言 > 正文

如何在module.exports中访问对象属性

如何解决《如何在module.exports中访问对象属性》经验,为你挑选了1个好方法。

我很好奇如何访问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.



1> jfriend00..:

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.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有