Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问module.exports中的对象属性_Javascript_Object_Express_Javascript Objects - Fatal编程技术网

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

Javascript 如何访问module.exports中的对象属性,javascript,object,express,javascript-objects,Javascript,Object,Express,Javascript Objects,我很好奇如何访问module.exports中的另一个对象属性 情况如下: module.exports={ 文本:“abcd”, 索引:(req,res)=>{ console.log(文本)Javascript没有一种内置的方法来引用同一对象中的其他属性。有很好的理由说明它无法对任何任意属性执行此操作。因此,您必须确保此中包含正确的对象值,或者您需要将适当的对象引用保存到可以访问t 以下是您自己保存对象引用的一种方法,它适用于单例对象: let myObj = { text: 'abc

我很好奇如何访问module.exports中的另一个对象属性

情况如下:

module.exports={
文本:“abcd”,
索引:(req,res)=>{

console.log(文本)Javascript没有一种内置的方法来引用同一对象中的其他属性。有很好的理由说明它无法对任何任意属性执行此操作。因此,您必须确保
中包含正确的对象值,或者您需要将适当的对象引用保存到可以访问t

以下是您自己保存对象引用的一种方法,它适用于单例对象:

let myObj = {

 text: 'abcd',
 index: (req, res)=>{
   console.log(myObj.text)
 }

}

module.exports = myObj;

如果您知道
.index()
始终会作为
模块.exports
上的方法被适当调用(这是通常的情况),那么您可以停止使用
=>
定义,并使用普通的
函数
定义(该函数通常用于方法声明)然后,
将具有所需的值

module.exports = {

 text: 'abcd',
 index: function(req, res) {
   console.log(this.text)
 }
}
只要像这样调用
.index()
索引,这将起作用:

let myModule = require('myModule');
myModule.index(req, res);
人们往往会爱上箭头语法,忘记它几乎不应该用于方法定义,因为它不会将
this
设置为宿主对象,这会给方法带来问题。相反,使用常规的
函数定义对象的方法


箭头函数通常对回调函数非常有用,您希望回调函数能够从您的环境中访问
this
值(称为
this
的词法值)。以下是一些有用的示例:

class Timer {
    delay(t, cb) {
       this.timer = setTimeout(() => {
           // preserve this value inside a callback
           this.timer = null;
           cb();
       })
    }
}


另一方面,您几乎不希望对方法使用箭头声明,因为这将覆盖
this
的常用对象值,并用
this
的词法值替换它

module.exports = {

        text: 'abcd',
        index: function (req,res) {
            console.log(this.text)
        }
    }
通过访问

var te=require('modulename')
    te.index()

我仍然感到惊讶的是,有人可以在不了解的情况下了解。在编码时按大小写学习的最佳实践是:D感谢您的提醒。@当您编辑问题使其成为一个完全不同的问题时,FelixKlingStack溢出无法正常工作。您的原始问题包含
定义的箭头语法索引
,这就是我的答案。当我写下我的答案后,你编辑了你的问题,你破坏了这个问题/答案的全部要点。请不要这样做。我建议你把你的问题放回原来的提问方式,这样答案仍然相关。如果你想了解更多信息,你可以看到我如果你可以通过评论获得这些信息,或者你应该问一个新的/不同的问题。谢谢你通知我,我得到了@JFriend00很好的解释,但我想知道在所有场景中我们可以使用箭头符号?谢谢:)那么
module.exports={index(){this.text不能有所需的值。}
im使用es6syntax@ricky-箭头函数明确用于希望
this
值是词法值,而不是通过调用函数的方式来确定的情况。在您的情况下,this的词法值是位于模块顶层的任何东西,它不是您的对象。您可以将词法值视为定义此代码时,
this
的值是多少。这根本不是您想要的,因此箭头语法不合适。在指定回调函数时,箭头语法通常非常合适,您希望将
this
的词法值保留在回调函数中。@ricky-我添加了一些箭头函数,例如请举例说明我的答案。箭头函数不仅仅是一个应该一直使用的语法快捷方式。您需要知道使用箭头语法声明的函数和使用正常函数语法声明的函数之间的区别,以便知道哪一个是合适的。如果您真的不确定使用哪一个,那么您可能应该坚持使用常规的
函数
声明(多年来,我们都在ES5及更早版本中使用它),当您知道如何使用它时,箭头语法非常有用。
var te=require('modulename')
    te.index()