为什么`this`绑定到窗口?

时间:2014-06-29 09:27:48

标签: coffeescript

点击后我需要获得一个href值。我的代码如下所示:

$('.menu a').click (event) =>
  event.preventDefault()
  console.log($(this).attr('href')) # it returns 'undefined'

我做错了什么?

[编辑]

我的HTML代码:

<div class="menu">
    <a href="/all/">All</a>
</div>

1 个答案:

答案 0 :(得分:2)

这是因为=>->之间Coffeescript的微妙差异

  

在JavaScript中,this关键字的动态范围是指   当前函数附加到的对象。如果你通过了   作为回调函数或将其附加到不同的对象,   原来的价值将会丢失。如果你不熟悉这个   行为,this Digital Web article给出了很好的概述   怪异。

     

胖箭头=&gt; 可用于定义函数并绑定它   到现在这个的当前价值。这很有用   使用基于回调的库(如Prototype或jQuery)进行创建   迭代器函数传递给每个或要使用的事件处理函数   与绑定。使用胖箭头创建的函数可以访问   他们定义的属性。

     

http://coffeescript.org/

这就是将this绑定到窗口的原因。

您应该使用:

$('.menu a').click (event) ->
  event.preventDefault()
  console.log($(this).attr('href')) # it returns the link !