这是一个跟进我刚才的问题的Javascript:的ReferenceError:MyClass的是没有定义 。
跟这个有.coffee文件转换为.js文件将创建一个MyClass
只有内部的范围。
class MyClass
name: (name) ->
是否有CoffeScript一种方法,使类提供给外部范围? 我应该能够<script src..
一个HTML页面上的文件,并从控制台实例化类。
这是一个跟进我刚才的问题的Javascript:的ReferenceError:MyClass的是没有定义 。
跟这个有.coffee文件转换为.js文件将创建一个MyClass
只有内部的范围。
class MyClass
name: (name) ->
是否有CoffeScript一种方法,使类提供给外部范围? 我应该能够<script src..
一个HTML页面上的文件,并从控制台实例化类。
你会“污染在全球范围内,”不管你怎么做。 这只是你怎么做的问题。
该@
在CoffeeScript的符号用来表示“这个范围”。 所以,你甚至可以用它在一个类定义。 在类声明的结果是,类在范围定义window
对象(除非有一些其他的情况,但是这不太可能在你描述这里是什么)。
class @CustomClassName
constructor: ->
# constructor stuff goes down...
不过,我更喜欢用一个命名空间要做到这一点,个人。 想想google.maps.Map
,或者如果你曾经写过已经ActionScript 3的: flash.display.MovieClip
。
在你的CoffeeScript文件的顶部放东西沿着这一行:
window.customnamespace = window.customnamespace || {}
现在,当你创建你的类,你可以说:
class customnamespace.ClassName
constructor: (container) ->
# set the container
@container = container
# etc...
class customnamespace.OtherClassName
constructor: ->
# Another class...
在您document.ready
(如果你使用jQuery),你会在全球有访问该命名空间和它的所有类。
例:
$(document).ready(function(e) {
var c = new customnamespace.ClassName($('#container'));
var other = new customnamespace.OtherClassName();
说得通?
该计算器给出了包括一些很好的例子创建具有全球的CoffeeScript对象的一个非常全面的概述。
在这个例子中的CoffeeScript:
window.MyClass = class MyClass
name: (name) ->
将编译到:
var MyClass;
window.MyClass = MyClass = (function() {
function MyClass() {}
MyClass.prototype.name = function(name) {};
return MyClass;
})();
这将给相同的行为回答你刚才的问题。