【问题标题】:Coffeescript binding?Coffeescript 绑定?
【发布时间】:2015-10-02 03:40:03
【问题描述】:

我刚刚读完Coffeescript 上的小书,我正在努力理解这门语言。我试图弄清楚如何做一个相当普通的香草绑定。这是我的代码:

times = (a = 1, b = 2) -> a*b 
h  = alert.bind times 8, 9    
h

这不会产生任何错误,但也不会运行任何警报。我究竟做错了什么?

【问题讨论】:

  • 你认为这到底是做什么的?
  • 正在在生成的 JavaScript Uncaught TypeError: Illegal invocation 中遇到错误。
  • @Mathletics 不,只有在调用函数时才会出现错误。
  • @RoyJ 我们的两个答案都指出 OP 需要调用该函数,因此他们将看到此错误。如果你真的想学究气,当然,这段代码不会产生错误,因为它什么都不做。代码的更正版本会抛出错误。
  • @Mathletics 但是说 OP is 出错是不正确的。 OP不是。我们是,当我们更改他的代码时。代码的更正版本将完全符合 OP 的要求。

标签: coffeescript bind


【解决方案1】:
  1. 您没有调用函数h。您需要致电h()
  2. 此代码没有意义。第 2 行转换为 var h = alert.bind(times(8, 9)),这意味着您正在尝试创建 alert 的版本,其中 this72。 ???你不能那样做。
  3. 每 2 次,这会引发错误,Uncaught TypeError: Illegal invocation

【讨论】:

    【解决方案2】:

    了解coffeescript 的一个有用工具是JS2Coffee,它将在Coffeescript 和JavaScript 之间来回转换代码。然后你可以看看你写的是否是你认为你写的。

    您的代码有两个问题:

    1. bind 将上下文(它将用作其this)作为其第一个参数。调用新函数时,后续参数将形成绑定函数的参数列表。
    2. 调用没有参数的函数需要 CS 中的括号

    【讨论】:

    • 非常感谢。非常感谢并很高兴看到有如此活跃且知识渊博的 cs 用户群。
    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多