Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CoffeeScript中的变量类型_Coffeescript_Scope - Fatal编程技术网

CoffeeScript中的变量类型

CoffeeScript中的变量类型,coffeescript,scope,Coffeescript,Scope,我不太确定CoffeeScript中不同变量的用途 class Cow @utters = 1 constructor: (@name) -> mutate:-> alert @utters heads: 1 feet = 9 c = new Cow 从我的调查来看,头是公共的,脚是私人的。当我弄清楚名称和发出的声音时,我感到困惑。对于name它或多或少编译为this.name=name,对于utters它编译为Cow.utters=1 所

我不太确定CoffeeScript中不同变量的用途

class Cow
  @utters = 1

  constructor: (@name) ->

  mutate:->
     alert @utters

  heads: 1
  feet = 9


c = new Cow 
从我的调查来看,
是公共的,
是私人的。当我弄清楚
名称
发出的声音
时,我感到困惑。对于
name
它或多或少编译为
this.name=name
,对于
utters
它编译为
Cow.utters=1


所以我的问题是。
utters
的范围是什么,应该如何访问?
name
的范围是什么?应该如何访问它?

让我们逐一看看

对于:

当你点击
@utters=1
时,这个
就是类本身,所以这个
@utters
有点像类变量。JavaScript版本如下所示:

var Cow = (function() {
  function Cow() {}
  Cow.utters = 1;
  return Cow;
})();
var Cow = (function() {
  var feet = 9;
  function Cow() {}
  Cow.prototype.m = function() { return alert(feet) };
  return Cow;
})();
子类将能够看到这一点,但它们将拥有自己的副本;因此,对于这一点:

class CowCow extends Cow
  m: ->
    CowCow.utters = 11
CowCow.utters
开始时为1,但在
(新的CowCow)之后为11。m()
Cow.utters
将一直保持在1

委员会:

本质上是一个默认的实例变量;JavaScript版本如下所示:

var Cow = (function() {
  function Cow() {}
  Cow.prototype.heads = 1;
  return Cow;
})();
Cow.prototype.heads=1部分意味着
被继承并附加到实例而不是类

结果是:

class Cow
  heads: 1

class CowCow extends Cow
  m: ->
    alert @heads
    @heads = 11

(new CowCow).m()
alert (new Cow).heads
警告1两次

委员会:

是另一种类型的类变量,但这个变量非常私有:
feet
不是继承的,对子类不可见,对外部世界也不可见。JavaScript版本如下所示:

var Cow = (function() {
  function Cow() {}
  Cow.utters = 1;
  return Cow;
})();
var Cow = (function() {
  var feet = 9;
  function Cow() {}
  Cow.prototype.m = function() { return alert(feet) };
  return Cow;
})();
所以你可以看到:

  • 将对所有
    奶牛
    方法可见
  • 所有
    Cow
    实例将共享相同的
    foot
  • feet
    不是公共的,因为如果不调用
    Cow
    方法(类或实例都可以),就无法获取它
  • feet
    对子类不可见,因为它不是类的属性,也不在
    原型中(因此它不会被子类的实例继承)


  • Summary
    @utters
    是一种传统的类变量,
    heads
    是一个带有默认值的公共实例变量,
    foots
    是一种私有类变量。

    让我们逐一看看这些变量

    对于:

    当你点击
    @utters=1
    时,这个
    就是类本身,所以这个
    @utters
    有点像类变量。JavaScript版本如下所示:

    var Cow = (function() {
      function Cow() {}
      Cow.utters = 1;
      return Cow;
    })();
    
    var Cow = (function() {
      var feet = 9;
      function Cow() {}
      Cow.prototype.m = function() { return alert(feet) };
      return Cow;
    })();
    
    子类将能够看到这一点,但它们将拥有自己的副本;因此,对于这一点:

    class CowCow extends Cow
      m: ->
        CowCow.utters = 11
    
    CowCow.utters
    开始时为1,但在
    (新的CowCow)之后为11。m()
    Cow.utters
    将一直保持在1

    委员会:

    本质上是一个默认的实例变量;JavaScript版本如下所示:

    var Cow = (function() {
      function Cow() {}
      Cow.prototype.heads = 1;
      return Cow;
    })();
    
    Cow.prototype.heads=1部分意味着
    被继承并附加到实例而不是类

    结果是:

    class Cow
      heads: 1
    
    class CowCow extends Cow
      m: ->
        alert @heads
        @heads = 11
    
    (new CowCow).m()
    alert (new Cow).heads
    
    警告1两次

    委员会:

    是另一种类型的类变量,但这个变量非常私有:
    feet
    不是继承的,对子类不可见,对外部世界也不可见。JavaScript版本如下所示:

    var Cow = (function() {
      function Cow() {}
      Cow.utters = 1;
      return Cow;
    })();
    
    var Cow = (function() {
      var feet = 9;
      function Cow() {}
      Cow.prototype.m = function() { return alert(feet) };
      return Cow;
    })();
    
    所以你可以看到:

  • 将对所有
    奶牛
    方法可见
  • 所有
    Cow
    实例将共享相同的
    foot
  • feet
    不是公共的,因为如果不调用
    Cow
    方法(类或实例都可以),就无法获取它
  • feet
    对子类不可见,因为它不是类的属性,也不在
    原型中(因此它不会被子类的实例继承)


  • Summary
    @utters
    是一种传统的类变量,
    heads
    是一种带有默认值的公共实例变量,
    feet
    是一种私有类变量。

    Wow。非常感谢您的详细解释。这真的很有帮助!哇!非常感谢您的详细解释。这真的很有帮助!