gpt4 book ai didi

javascript - 将方法作为回调传递时,Coffescript 的 @ 范围不正确

转载 作者:行者123 更新时间:2023-11-28 13:24:27 24 4
gpt4 key购买 nike

当我传递带有粗箭头的匿名函数作为 socket.io 回调,然后调用同一对象中的另一个方法时(如下所示),@ 的范围是正确的:

module.exports = class InviteCreateSocket extends AbstractSocket
register: () ->
@socket.on 'invite:create', (data, callback) => @create data, callback

create: (data = {}, callback = @_noop) ->
# This returns an instantiated InviteCreateSocket. Bonzer!
console.log @

但是,如果我直接传入它,作用域现在就是套接字,就像我用细箭头运行了前面的代码一样:

module.exports = class InviteCreateSocket extends AbstractSocket
register: () ->
@socket.on 'invite:create', @create

create: (data = {}, callback = @_noop) ->
# This returns the socket. Not bonzer. Not bonzer at all.
console.log @

那么,有没有一种很好的干净方法来获取对象范围,而不必通过胖匿名函数中继它们?第一种方法可以工作,但看起来有点笨拙,显然需要同步参数在所有的方法中。提前致谢!

最佳答案

为什么不使用粗箭头来表示属于该类的函数,从而将它们正确绑定(bind)到该类的上下文(及其实例) - 这更符合它的工作原理。

module.exports = class InviteCreateSocket extends AbstractSocket
register: () =>
@socket.on 'invite:create', @create
return

create: (data = {}, callback = @_noop) =>
console.log @
return

另外,不要忘记在函数中添加空返回,这些函数并不打算返回某些内容。

关于javascript - 将方法作为回调传递时,Coffescript 的 @ 范围不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30255535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com