不确定如何将方法定义转换为 ES6

Unsure how to convert method definition to ES6

我目前正在将我们的 Backbone 应用程序转换为 ES6 语法,例如这个:

action: function(e){},

变成

action(e) {}

但是,现在我有了这个代码:

throttleEvent: _.throttle(function(e) {
    //do stuff
    }, 500);
}

而且我似乎找不到如何将其转换为有效语法的方法。 我试过了

throttleEvent _.throttle((e) => {
    //do stuff
    }, 500);
}

throttleEvent() {
    return _.throttle((e) => {
    //do stuff
    }, 500);
}

但是这些都没有用。

帮助将其转换为有效语法将不胜感激。

试试这个语法:

_.throttle(() => //Do stuff, 5000) 

嗯,我不太确定短语法是否适用于您的示例。

让我们看看你的开始

action: function(e){},

您有一个对象,该对象有一个名为 "action" 的 属性,并且 属性 包含一个稍后可以由 obj.action() 调用的函数。

现在举个例子

throttleEvent: _.throttle(function(e) {}

你又得到了一个对象,它有一个 属性 叫做 throttleEvent。但主要区别在于价值。该值是函数 _.throttle() 的 return 值

摘自文档 (https://lodash.com/docs/4.17.4#throttle)

Creates a throttled function that only invokes func at most once per every wait milliseconds

所以您的 属性 实际上拥有您从库中 return 得到的函数。这就解释了为什么你的第二种方法不起作用。因为在此版本中,每次 调用对象属性 时,都会创建一个新的 节流函数。 (对于你的第一个解决方案,我认为这是无效的语法)

如果你真的想使用短语法,我认为最好的方法是,将 throttle 函数分配给一个变量,然后再使用它

例如这样的东西

const throttleFunction = _.throttle((event) => {
    //do stuff
}, 500);
const obj = {
    throttleEvent(event): any {
        return throttleFunction(event);
    },
};

但是接下来要决定 ES6 语法在这种情况下是否有意义,或者你是否坚持使用原始版本

throttleEvent: _.throttle(function(e) {
    //do stuff
    }, 500)

仅仅因为有不同的语法可用,并不意味着您总是必须使用新的语法。在某些情况下 "old one" 实际上更有意义