Coffeescript – ‘this’总是被胖箭头回调中的’_this’取代
我想知道有可能以某种方式阻止this
关键字被转换成_this
内部胖箭头回调( =>
)?
例如:
class someClass someMethod: -> $(document).on 'click', '.myclass', (e) => # doing things with right context this, it's ok @anotherMethod() @oneMoreMethod() # but here I need jQuery ``this`` pointing to element $el = $ this # this is transformed into ``_this`` :(
也许我错过了一些选项或运营商?
更新我知道像self = this
的伎俩,但我认为CS有更优雅的东西..
这就是=>
的全部目的。
使用$(e.currentTarget)
来获取本来可以使用的元素的句柄。 这与您已拒绝的$(e.target)
。
不,CoffeeScript 没有更优雅的方式来处理这个问题。 一个函数只能有一个上下文。 绑定函数不是CoffeeScript独有的,它们是JavaScript的一个特性,解决方案是让调用代码提供另一种访问元素的方式,jQuery使用e.target
和e.currentTarget
。
=>
胖箭头而不是瘦箭头的目的->
是为了防止改变它的上下文。 你有多种选择。 一种选择是在变量内存储this
的引用,例如以下内容。
self = @ method: -> @ is self # true self = @ method: => @ is self # false class someClass someMethod: -> self = @ $(document).on 'click', '.myclass', (e) -> # self (by default) refers to your class # @ refers to the jquery object (context)