在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中的类的更多相关文章

  1. java并发学习第五章--线程中的锁

    一.公平锁与非公平锁 线程所谓的公平,就是指的是线程是否按照锁的申请顺序来获取锁,如果是遵守顺序来获取,这就是个公平锁,反之为非公平锁. 非公平锁的优点在于吞吐量大,但是由于其不是遵循申请锁的顺序来获 ...

  2. Knockout应用开发指南 第五章:创建自定义绑定

    原文:Knockout应用开发指南 第五章:创建自定义绑定 创建自定义绑定 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定 ...

  3. web前端开发学习:jQuery的原型中的init

    web前端开发学习:jQuery的原型中的init 有大量web前端开发工具及学习资料,可以搜群[ web前端学习部落22群 ]进行下载,遇到学习问题也可以问群内专家以及课程老师哟 jQuery.fn ...

  4. Java基础知识二次学习--第五章 数组

    第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 ...

  5. C#高级编程 (第六版) 学习 第五章:数组

    第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...

  6. Java开发学习(十五)----AOP入门案例及其工作流程解析

    一.AOP简介 1.1 什么是AOP AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构. OOP(Object Oriented ...

  7. 继《关于讯飞语音SDK开发学习》之打包过程中遇到小问题

    关于讯飞语音SDK开发学习 使用vs自带打包,具体怎么操作就不说了,网上关于这方面的资料挺多的.例如:winform 打包部署,VS2010程序打包操作(超详细的),关键是桌面上创建快捷方式中的&qu ...

  8. Java程序设计基础笔记 • 【第7章 Java中的类和对象】

    全部章节   >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...

  9. 深度学习框架PyTorch一书的学习-第五章-常用工具模块

    https://github.com/chenyuntc/pytorch-book/blob/v1.0/chapter5-常用工具/chapter5.ipynb 希望大家直接到上面的网址去查看代码,下 ...

随机推荐

  1. Svg path画线(不管是直线还是曲线)在一定情况下线条的宽度不一的情况(记录)

    在项目中涉及到svg: 使用path划线实现图表功能. 记录在实现的过程中发现的问题:path在小像素的情况下画出的线条宽度不一样.这是为什么呢? 以下是我做的猜想: 可以看图 在宽度给的很足的时候没 ...

  2. 使用Navicat连接数据库,不能创建外键

    最近在学习python中遇到这样的情况,使用Navicat连接MySQL,为表结构创建外键时,出现了创建外键就消失,而且外键也没有创建成功的情况. 在网上找了些资料,最后发现是MySQL引擎的问题.由 ...

  3. VMware10.06精简版安装后台运行

    VMware10.06精简版安装时会出现一个安装功能选择菜单,里面有一条后台运行必选功能,一般人会跳过条.当你打算在服务器上用vmware时,一定要安装后台运行服务,否则你无法换出正在运行的后台虚拟机 ...

  4. js嵌套对象相等比较的一种方法 (原创)

    做前端开发经常会遇到比较js对象是否相等的情况, 或者说其它问题往往会归结到这个问题上来:比如对象数组的去重复. 网上看到过很多例子, 但是基本上都是那种比较简单的对象结构, 而复杂的对象结构,比如对 ...

  5. Visual Studio 设置多核编译

    1.选择一个指定项目右击 -> 属性 -> 配置属性 -> C/C++ -> 命令行 在附加选项中输入:/MP4 或者/MP8 等,后面的那个数字是指定CPU 核的数量,可以自 ...

  6. 对于C(n,k)取模

    2016.1.26 法一:直接根据定义式,求乘法逆元即可 法二:借助关于n!mod p,那么根据C(n,k)的定义式并结合乘法逆元即可求解. 法三:借助卢卡斯定理求解 特别注意:在C(n,k)模p等于 ...

  7. Java的常用对象①②

    Java的常用对象① Java的常用对象有很多,这里只对lang包中常用的Object,Date(Calendar,DateFormat,Math),System,Runtime进行介绍.㈠Objec ...

  8. SIP 解析

    1 general-header类: 为描述消息基本属性的通用头域,可用于请求消息或响应消息:通用头域的域名只有在协议版本改变时才可有效地扩展.不过,通信中的所有方均认为是“通用头域”的新的头域也可认 ...

  9. AE IRasterCursor 改变栅格图层像素值

    1 public void ChangePixelValue(double xMax, double xMin, double yMax, double yMin,double[,] PixelCha ...

  10. JVM & Server & Connector & Context Relationship