首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >->函数声明func: Coffeescript函数声明func :Coffeescript函数声明func:func或func=Coffeescript?

->函数声明func: Coffeescript函数声明func :Coffeescript函数声明func:func或func=Coffeescript?
EN

Stack Overflow用户
提问于 2011-12-28 05:41:15
回答 1查看 384关注 0票数 1

我正在阅读spine.js文档,我想知道一点关于函数声明的事情。在文档中我总是读到

代码语言:javascript
复制
constructor: ->
  super
  ....

但除此之外,我总是看书

代码语言:javascript
复制
constructor = ->
  super
  ....

那么:和=对于函数声明是相等的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-28 05:47:19

不是的。

在定义类时,:的工作方式与其他地方略有不同。在类定义中,:意味着将此函数作为方法放在原型上(实例方法)。constructor:是用于构造函数的一个特例。

如果你看一下编译后的javascript,就会发现两者的区别是显而易见的。

代码语言:javascript
复制
class Foo
  constructor: -> @foo = 'foo'
  method: ->

编译成这样(很好!)

代码语言:javascript
复制
var Foo;
Foo = (function() {
  function Foo() {
    this.foo = 'foo';
  }
  Foo.prototype.method = function() {};
  return Foo;
})();

您可以看到构造函数就是构造函数,而方法在原型上。

但是,当您使用=时,您只需分配局部变量,而函数并不是作为构造函数或原型的类的一部分:

代码语言:javascript
复制
class Bar
  constructor = -> @bar = 'bar'
  method = ->

编译成这样(Bad!)

代码语言:javascript
复制
var Bar;
Bar = (function() {
  var constructor, method;
  function Bar() {}
  constructor = function() {
    return this.bar = 'bar';
  };
  method = function() {};
  return Bar;
})();

只需查看编译结果,就可以发现或解决许多有关咖啡脚本语法的问题。这也是为什么我不建议在不了解JavaScript的情况下学习咖啡脚本的原因,因为如果你不知道它编译成什么,那么它所做的一些事情就没有真正的意义。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8649588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档