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

xghobddn  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(112)

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

但这些都没能奏效。
请帮助将其转换为有效的语法。

h7appiyu

h7appiyu1#

我不太确定这个简短的语法是否适用于你的例子。
让我们来看看你的开始

action: function(e){},

你有一个对象,这个对象有一个名为“action”的属性,这个属性保存了一个函数,稍后可以被obj.action()调用。
现在以你为例

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

同样,你有一个对象,它有一个名为throttleEvent的属性,但主要的区别是值,这个值是函数_.throttle()的return Value
摘自文档(https://lodash.com/docs/4.17.4#throttle)
创建一个限制函数,该函数每等待毫秒最多只调用func一次
所以你的属性实际上保存了你从库中返回的函数。这就解释了为什么你的第二种方法不起作用。因为在这个版本中,每次你调用对象属性,你创建了一个新的throttle函数。(对于你的第一种解决方案,我认为这是无效的语法)
我认为,如果您真的想使用简短语法,最好的方法是在使用之前将throttle函数分配给一个变量
比如像这样的东西

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

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

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

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

p4tfgftt

p4tfgftt2#

请尝试以下语法:

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

相关问题