【问题标题】:How to access object property in module.exports如何访问 module.exports 中的对象属性
【发布时间】:2017-05-29 13:30:59
【问题描述】:

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

情况如下:

module.exports = {

    text: 'abcd',
    index: (req, res)=>{
    console.log(text) <-- is not defined
    console.log(this.text) <-- undefined
    }
}

那么,如何访问 text 属性?谢谢大家需要你的解释。

【问题讨论】:

  • 仍然让我感到惊讶的是,有人可以在不了解 this 的情况下了解 arrow functions
  • 在编码时通过找到的案例学习它的最佳实践:D 感谢您提醒我。 @FelixKling
  • 当您编辑问题以使其成为一个完全不同的问题时,堆栈溢出无法正常工作。您的原始问题包含index 定义的箭头语法,这就是我的回答。当你在我写完答案后编辑你的问题时,你有点毁了这个问题/答案的全部意义。请不要那样做。我建议您按照最初提出的方式提出问题,以便答案仍然相关。如果您想询问更多信息,您可以查看是否可以通过 cmets 获取该信息,或者您应该提出新的/不同的问题。
  • 谢谢你通知我,我找回了@jfriend00

标签: javascript object express javascript-objects


【解决方案1】:

Javascript 没有内置方式来引用同一对象中的其他属性。它不能对任何任意属性执行此操作是有充分理由的。因此,您要么必须确保 this 中包含正确的对象值,要么您需要自己将适当的对象引用保存在可以访问的位置。

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

let myObj = {

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

}

module.exports = myObj;

如果您知道.index() 将始终作为module.exports 上的方法被适当调用(这是通常的情况),那么您可以停止使用=&gt; 定义并使用普通的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 的词法值。

【讨论】:

  • 很好的解释,但我想知道在什么情况下我们可以使用箭头符号?谢谢:)
  • module.exports = { index(){ this.text cannot have the desired value. } }im 使用 es6 语法怎么样
  • @ricky - 当您希望 this 值是词法而不是根据函数的调用方式确定时,箭头函数是明确的。在您的情况下, this 的词法值是 this 位于模块顶层的任何内容,它不是您的对象。您可以将词法 this 视为定义此代码时 this 的值。这根本不是您想要的,因此箭头语法不合适。当指定回调函数时,箭头语法通常非常合适,您希望将 this 的词法值保留在回调中。
  • @ricky - 我在答案中添加了一些箭头函数示例。箭头函数不仅仅是一个应该一直使用的语法快捷方式。您需要知道使用箭头语法声明的函数和使用普通函数语法声明的函数之间的区别,以便知道哪一种更合适。如果你真的不确定要使用哪个,那么你可能应该坚持使用常规的function 声明(我们都使用 ES5 和更早的版本多年来一直很好地工作)。当您知道自己在做什么时,箭头语法很有用。
【解决方案2】:

试试这个

module.exports = {

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

访问途径

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2019-06-02
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多