限定用于在CoffeScript外范围的类(defining classes for outer s

2019-10-17 09:37发布

这是一个跟进我刚才的问题的Javascript:的ReferenceError:MyClass的是没有定义 。

跟这个有.coffee文件转换为.js文件将创建一个MyClass只有内部的范围。

class MyClass
    name: (name) -> 

是否有CoffeScript一种方法,使类提供给外部范围? 我应该能够<script src..一个HTML页面上的文件,并从控制台实例化类。

Answer 1:

你会“污染在全球范围内,”不管你怎么做。 这只是你怎么做的问题。

@在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();

说得通?



Answer 2:

该计算器给出了包括一些很好的例子创建具有全球的CoffeeScript对象的一个非常全面的概述。

在这个例子中的CoffeeScript:

window.MyClass = class MyClass
    name: (name) -> 

将编译到:

var MyClass;

window.MyClass = MyClass = (function() {

  function MyClass() {}

  MyClass.prototype.name = function(name) {};

  return MyClass;

})();

这将给相同的行为回答你刚才的问题。



文章来源: defining classes for outer scope in CoffeScript