符号汇总(左=CS,右=JS)
内class Animal
:
identifier: value Animal.prototype.identifier = value
@identifier: value Animal.identifier = value
@identifier= value Animal.identifier = value
identifier = value identifier = value (private var)
其他地方(按相同的编译结果排序)
Animal::identifier = value Animal.prototype.identifier = value
Animal.identifier = value Animal.identifier = value
identifier = value identifier = value
// New:
@identifier = value this.identifier = value
identifier: value { identifier: value} (object literal)
@identifier: value ---INVALID---
在 CoffeeScript 中,@ 编译为this
.
在class
构造的上下文中,方法定义受使用@
(this) 的影响。这是一个简单的例子:
class ClassObject
instanceMethod: ->
# This method will be defined on the prototype (available to instance)
@classMethod: ->
# This method is defined on the class object itself, not on the instance
this.classMethod2 = -> # See previous and below
privateVar = "private"
尽管语法略有不同,但最新的两个具有相同的编译结果。
:
“类块内是什么意思?”
它用于定义属性。当使用=
(等号)代替时,将定义一个“私有”变量。
:
“ (构造函数)方法内部是什么意思?
在类的级别之外(例如顶级代码、函数内部、构造函数等),:
不具有“特殊类”的含义。:
是对象文字中键名对之间的分隔符。
您给定的代码@upperName: -> ...
无效,并且无法在最新的 CoffeeScript 版本中编译。upperName: -> ...
虽然是有效的,并且将编译为具有属性upperName
和函数作为值的对象文字。
查看编译后的 CoffeeScript 代码:
var ClassObject;
ClassObject = (function() {
var privateVar;
function ClassObject() {}
ClassObject.prototype.instanceMethod = function() {};
ClassObject.classMethod = function() {};
ClassObject.classMethod2 = function() {};
privateVar = "private";
return ClassObject;
})();