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

时间:2018-02-20 08:15:27

标签: javascript backbone.js ecmascript-6

我目前正在将我们的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);
}

但这些都无法奏效。

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

2 个答案:

答案 0 :(得分:3)

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

让我们看看你的开始

action: function(e){},

你有一个对象,该对象有一个名为“action”的属性,该属性包含一个函数,以后可以被obj.action()调用。

现在举例到

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

你有一个对象,它有一个名为throttleEvent的属性。但主要的区别在于价值。该值是函数_.throttle()的返回值

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

  

创建一个限制函数,每个等待毫秒最多只调用一次func

因此,您的属性实际上包含您从库中返回的函数。这就解释了为什么你的第二种方法不起作用。因为在此版本中每次都会调用object属性,所以创建一个新的限制功能。 (对于你的第一个解决方案,我认为这是无效的语法)

我认为如果你真的想要使用短语法,那么最好的方法是,先将油门函数分配给变量,然后再使用它

例如像

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

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

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

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

答案 1 :(得分:0)

尝试这种语法:

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