【问题标题】:JavaScript Object notation - using methods inside the same object?JavaScript 对象表示法 - 在同一个对象内使用方法?
【发布时间】:2018-07-18 18:15:05
【问题描述】:

我正在尝试使用 node.js,并且我有一组使用 module.exports 导出的方法,但是其中一些方法可以用于同一个对象,但我不知道如何去做。在 PHP 中,我会简单地引用 this。我知道this 可以在原型对象中引用,但在 JavaScript 对象表示法中也可以这样做吗?

示例代码:

module.export = {

    foo: (a, b) => {
        return a + b;
    },

    bar: () => {
       return foo(2, 5); // This is where i run into problems, using 'this' has no effect.
    }

}

【问题讨论】:

    标签: javascript reusability object-notation


    【解决方案1】:

    您可以在 JavaScript 中使用 this 关键字。您必须进行的唯一其他更改是使用实际函数而不是 arrow functions,因为箭头函数不会捕获 this 范围。

    这是来自MDN page on arrow functions 的引用。

    箭头函数表达式的语法比函数表达式短,并且没有自己的 this、arguments、super 或 new.target。

    因为它没有自己的this,在这种情况下你不能使用箭头函数。

    以下是如何重构代码以按预期方式工作的示例。

    module.export = {
    
        foo: function (a, b) {
            return a + b;
        },
    
        bar: function () {
           return this.foo(2, 5);
        }
    
    }
    

    【讨论】:

    • 实际上,速记方法更接近这里的用例:foo(a, b){ return a + b; }, bar(){ return this.foo(2, 5) },因为它们的行为类似于箭头函数,但也有自己的 this
    • 感谢您的澄清。将 ES6 与箭头函数一起敲入我的头骨后,我只是假设它会以相同的方式运行。现在我不太确定是否值得保存额外的几个字符。
    • @Xufox,您是说可以省略方法键/名称是这种情况吗?如 foo: function() {} 可以写成 foo() {} ?
    • @FrederickM.Rogers 是的。这是short-hand method notation。它们就像箭头函数一样,不可构造(不能是new'd)。
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2016-04-13
    相关资源
    最近更新 更多