CoffeeScript中的变量类型
我不太确定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 所
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。非常感谢您的详细解释。这真的很有帮助!哇!非常感谢您的详细解释。这真的很有帮助!