《CoffeeScript应用开发》学习:第五章 CoffeeScript中的类
在CoffeeScript中定义类
在CoffeeScript中,使用class
定义类,使用关键字new
实例化对象。
给类绑定方法
class Airplane
takeOff: ->
console.log 'Vrroom!'
plane = new Airplane()
plane.takeOff()
CoffeeScript如何构建Javascript类
CoffeeScript中的类型系统基于JavaScript的原型继承实现。上面的代码生成的JavaScript代码为:
var Airplane;
Airplane = (function() {
function Airplane() {}
Airplane.prototype.takeOff = function() {
return console.log('Vrroom!');
};
return Airplane;
})();
上面的例子中,函数先声明空构造函数,并将takeOff函数绑定到类的原型上。
保持对象属性状态
状态存储在绑定到对象的属性里。使用@运算符实现。
class Airplane
describle: ->
"A #{@color} plane"
plane = new Airplane()
plane.color = 'white'
console.log plane.describle # 输出white
在对象中调用其他方法
class Airplane
takeOff: (eta) ->
@taxi()
console.log "#{s}..." for s in [eta..0]
console.log 'Vrrroom'
taxi: ->
if Math.random() > 0.5
console.log 'Taxiing...'
@something
实际上是this.something
的别名。我们甚至@替换出现的this。可以将@作为this作为参数传递。
在类定义的外面绑定方法
CoffeeScript提供::
运算符,以简单实现对象原型的访问。如:
Date::getYearAE = ->
monthOffset = if @getMonth() < 11 then 1 else 0
@getFullYear() - 1944 - monthOffset
today = new Date()
console.log "It is the year #{today.getYearAE()} AE" # 输出 It is the year 71 AE
上面使用::
运算符的CoffeeScript代码编译为
Date.prototype.getYearAE = function() {
var monthOffset;
monthOffset = this.getMonth() < 11 ? 1 : 0;
return this.getFullYear() - 1944 - monthOffset;
};
可以看到::
使用原型来实现把函数绑定到类。
构造函数
只要加上名字为constructor
的方法。同时,如果在构造函数列表中使用@
命名标识符,则自动赋值给同名属性
class Train
constructor: (@numCars, @type = 'diesel') ->
@load = 0
@capacity = @numCars * 100
类的静态方法调用
静态方法为绑定到类本身,在没有任何实例化的对象时,可以作为单独的引用使用。在CoffeeScript中,使用@开头的函数为静态函数。例:
同时,也可将静态属性绑定到类。
class Bicyle
@WHEELS = 2
@frameSizeByHeight: (rideHeight) ->
Math.floor rideHeight * 0.82
Bicyle.frameSizeByHeight 10 # 调用静态方法
console.log Bicyle.WHEELS # 输出 2
继承
在CoffeeScript中,类定义使用extends
表明这个类继承自另一个类。
class Automobile
honk: ->
console.log 'Beep!'
class Truck extends Automobile
honk: ->
super()
console.log 'Wee-oo wee-oo wee-oo'
同时,CoffeeScript继承也支持重载方法,只要在子类中重新定义与父类同名(参数不要求匹配)的方法即可。同时,在重载方法内部,可以使用super()
函数
《CoffeeScript应用开发》学习:第五章 CoffeeScript中的类的更多相关文章
- java并发学习第五章--线程中的锁
一.公平锁与非公平锁 线程所谓的公平,就是指的是线程是否按照锁的申请顺序来获取锁,如果是遵守顺序来获取,这就是个公平锁,反之为非公平锁. 非公平锁的优点在于吞吐量大,但是由于其不是遵循申请锁的顺序来获 ...
- Knockout应用开发指南 第五章:创建自定义绑定
原文:Knockout应用开发指南 第五章:创建自定义绑定 创建自定义绑定 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定 ...
- web前端开发学习:jQuery的原型中的init
web前端开发学习:jQuery的原型中的init 有大量web前端开发工具及学习资料,可以搜群[ web前端学习部落22群 ]进行下载,遇到学习问题也可以问群内专家以及课程老师哟 jQuery.fn ...
- Java基础知识二次学习--第五章 数组
第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节 视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 ...
- C#高级编程 (第六版) 学习 第五章:数组
第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...
- Java开发学习(十五)----AOP入门案例及其工作流程解析
一.AOP简介 1.1 什么是AOP AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构. OOP(Object Oriented ...
- 继《关于讯飞语音SDK开发学习》之打包过程中遇到小问题
关于讯飞语音SDK开发学习 使用vs自带打包,具体怎么操作就不说了,网上关于这方面的资料挺多的.例如:winform 打包部署,VS2010程序打包操作(超详细的),关键是桌面上创建快捷方式中的&qu ...
- Java程序设计基础笔记 • 【第7章 Java中的类和对象】
全部章节 >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...
- 深度学习框架PyTorch一书的学习-第五章-常用工具模块
https://github.com/chenyuntc/pytorch-book/blob/v1.0/chapter5-常用工具/chapter5.ipynb 希望大家直接到上面的网址去查看代码,下 ...
随机推荐
- KMPlayer 捆绑商业软件问题以及解决办法
Kmplayer 本来是很好的播放软件,支持的格式很多,特别我要在本地播放flash swf 就用它.昨天下载安装了他们推荐已久的更新之后,莫名帮我安装了几个软件,都是我不能选择的,例如Winzip. ...
- Microsoft Visual Studio 2012注册密钥
Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥:YKCW6-BPFPF-BT8C9-7DCTH-QXGWCMicrosoft Visual Studi ...
- jquery深拷贝和浅拷贝
var obj1 = { a: 1 };var obj2 = { b: {bbb: 2} };function Clone(){//浅拷贝 拷贝到obj1值会被改变 在一个栈中 $.extend(ob ...
- storm基础系列之二----zookeeper的作用
在storm集群中,我们常常使用zookeeper作为协调者.那么具体发挥的是什么作用呢? 概括来说,zookeeper是nimbus和supervisor进行交互的中介.具体来说有二: 1.nimb ...
- 擦掉STM32F429芯片上的数据的一个方法
刚入手一块STM32F429Discovery.手痒痒的,准备写个程序进去.一不小心,把MCU的调试接口SW.JTAG全部给禁用了.这下可坏了,写不进去程序,擦不掉数据.愁的某家一头大汗.突然想起了当 ...
- subline
快捷键(preference->key bindings): [ { "keys": ["ctrl+d"], "command": & ...
- Linux命令(22)find的使用
在linux下面工作,有些命令能够大大提高效率. 比如说find命令,他哥俩可以算是必会的linux命令,几乎每天都要用到他们. find命令 find命令的一般形式 find命令的常用选项及实例 f ...
- web.py学习心得
1.注意判断数字时,如果是get传递的参数,一定要用int转换.不然出错. 2.$var 定义时,冒号后的内容不是python内容,需加上$符号.如$var naviId:$naviId. 3.各个模 ...
- 【HOW】如何限制Reporting Services报表导出功能中格式选项
Reporting Services报表导出功能中缺省会提供多种导出格式选项,但很多情况下不需要全部的格式选项,因此需要对这些选项进行限制.下面我们以SQL Server 2008 R2为例来说明对这 ...
- Phoenix -修复表索引
索引的修复可以通过2种方式,(关于pehoenix的索引的生命周期可以参考 https://community.hortonworks.com/articles/58818/phoenix-inde ...