2013-11-27 82 views

回答

0

在引用前面testLocal

class A 
    constructor: -> 
    @init() 

    init: -> 
    @testLocal = 56 


class B extends A 

    init: -> 
    super 
    alert @testLocal 

new B() 

添加@符號在你原來的例子,相應的JavaScript外觀像這樣:

A.prototype.init = function() { 
    var testLocal; 
    return testLocal = 56; 
    }; 

    return A; 

    B.prototype.init = function() { 
    B.__super__.init.apply(this, arguments); 
    return alert(testLocal); 
    }; 

隨着@增加,你會得到這個代替:

A.prototype.init = function() { 
    return this.testLocal = 56; 
    }; 


    B.prototype.init = function() { 
    B.__super__.init.apply(this, arguments); 
    return alert(this.testLocal); 
    }; 

@增加了this.的引用,移動可變出局部範圍,並進入CoffeeScript的puesdo類。

+0

嗯,這就是我不想做的事情,因爲這會破壞局部變量的作用域。謝謝。 – mojarras

+0

@mojarras這是一個本地變量,它的範圍結束後不再存在。要在下降和ctor訪問它,你必須擴大範圍。 '@'實現了這一點,使之成爲類的一個屬性/字段,而不是本地的。 – asawyer

+0

是的,我想沒有其他方法比用@標記它們,我只是認爲有一些方法可以共享這些局部變量。感謝你的回答。 – mojarras