1

私はここ数年、フロントエンドでcoffeescriptを使用しています。そして、次のようなクラス構文に精通しています。

  class MyClass
      methodOne : ->
         console.log "methodOne Called"
      methodTwo : (arg, arrg) ->
         console.log "methodTwo Called"

最近は、node と、 coffeescript と node を使用した Web アプリケーションのフラッペボイラープレートで遊んでいます。

次の構文のルートに CoffeeScript クラスを使用するこのスクリプト:

  class MyClass
      @methodOne = ->
         console.log "methodOne Called"
      @methodTwo = (arg, arrg) ->
         console.log "methodTwo Called"

通常の使用方法との唯一の違いは、Routes.coffee ファイルがnewオブジェクトを作成するのではなく、クラスを直接使用することです。そう:

   MyClass.methodOne()

   # vs

   new MyClass().methodOne()

これで、構文が使用されていないのに、他の構文が@methodOne使用されていることがわかりました。.prototypeしかし、なぜこれが使用に失敗するのでしょうか?

4

1 に答える 1

2

したがって、 で始まる@メソッドはクラス メソッドであり、それ以外はすべてインスタンス メソッドです。インスタンス メソッドでは、:基本的に public を=意味しますが、private は意味します。「パブリック」と「プライベート」の二分法は、CoffeeScript のクラス メソッドには存在しないため:、同じことを=行います。どちらも公立です。

たとえば、次のクラスを見てください。

class MyClass
  @methodOne = -> 
  @methodTwo : -> 
  methodThree : ->
  methodFour = -> 

これは、次の JavaScript に評価されます。

var MyClass;

MyClass = (function() {
  var methodFour;

  function MyClass() {}

  MyClass.methodOne = function() {};
  MyClass.methodTwo = function() {};
  MyClass.prototype.methodThree = function() {};
  methodFour = function() {};

  return MyClass;

})();

したがって、methodOnemethodTwoは両方ともパブリック クラス メソッドでmethodThreeあり、プロトタイプに移行するため、これはパブリック インスタンス メソッドであり、methodFour内部で使用できるクラス内の変数になりますが、公開されることはありません。

あなたが求めていることに答えてくれることを願っていますか?

于 2013-02-24T18:46:50.323 に答える