咖啡脚本主干代码中的@符号和“->”和“ =>”的含义

时间:2019-07-02 15:40:26

标签: backbone.js coffeescript

的意义/含义是什么?
  • @前缀
  • ->和=>
  • 之间的差异

我可以找到一些文档吗? 很难用谷歌搜索这些特殊字符,所以我在这里问。 [full gist]

class RP.Dashboard.Events.Form extends Backbone.View
  el: '.simple_form.new_event, .simple_form.edit_event, .simple_form#new_event, .simple_form#edit_event'
  events:
    'focus #location_autocomplete': 'geolocate'
  address_component_map:
    street_number:
      key: 'short_name'
      form_field: '#event_address'


  initialize: ->
    @render()
    @init_autocomplete()

  render: ->
    @$(".datepicker" ).datepicker(
      showOn: "button"
      buttonImageOnly: true
      changeMonth: true
      changeYear: true
      format: 'yyyy-mm-dd'
      dateFormat: 'yy-mm-dd'
    )
    @$(".timepicker").timepicker()
    @$('.input-timepicker').timepicker({minuteStep: 1,showSeconds: false,showMeridian: true,defaultTime: '8'});


  fill_in_address: =>

1 个答案:

答案 0 :(得分:0)

谷歌搜索“标志处的咖啡”将Does the '@' symbol have special meaning in Javascript, Coffeescript or Jquery?作为最佳结果。 @在咖啡脚本中表示this

## coffeescript
self = @ 

## javascript
var self = this

关于->和=>之间的区别,使用谷歌搜索“ cofeescript->”将其作为顶部链接:

CoffeeScript, When to use fat arrow (=>) over arrow (->) and vice versa

要从此处复制并粘贴:

  

在定义方法时,我发现胖箭头的主要用例是当您要将方法用作回调并且该方法引用实例字段时:

class A
  constructor: (@msg) ->
  thin: -> alert @msg
  fat:  => alert @msg

x = new A("yo")
x.thin() #alerts "yo"
x.fat()  #alerts "yo"

fn = (callback) -> callback()

fn(x.thin) #alerts "undefined"
fn(x.fat)  #alerts "yo"
fn(-> x.thin()) #alerts "yo"
  

如您所见,如果不使用粗箭头,将实例的方法的引用作为回调传递给您可能会遇到问题。这是因为粗箭头将对象的实例绑定到该对象,而细箭头则没有,因此上述称为回调的细箭头方法无法访问@msg之类的实例字段或调用其他实例方法。最后一行是使用瘦箭头的情况下的解决方法。