类的一大应用就是多态。多态是一个面向对象编程的高级术语----“一个东西可编程很多不同的东西,但不是任何东西”。[引自coffeescript深入浅出]

class Shape
constructor: (@width) ->
computeArea: -> throw new Error 'I am an abstract class!' class Square extends Shape
computeArea: -> Math.pow @width, 2 class Circle extends Shape
radius: -> @width / 2
computeArea: -> Math.PI * Math.pow @radius, 2 showArea = (shape) ->
unless shape instanceof Shape
throw new Error 'showArea requires a Shape instance!'
console.log shape.computeArea() showArea new Square(2) #4
showArea new Circle(2) #pi

生成的javascript

// Generated by CoffeeScript 1.10.0
var Circle, Shape, Square, showArea,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty; Shape = (function() {
function Shape(width) {
this.width = width;
} Shape.prototype.computeArea = function() {
throw new Error('I am an abstract class!');
}; return Shape; })(); Square = (function(superClass) {
extend(Square, superClass); function Square() {
return Square.__super__.constructor.apply(this, arguments);
} Square.prototype.computeArea = function() {
return Math.pow(this.width, 2);
}; return Square; })(Shape); Circle = (function(superClass) {
extend(Circle, superClass); function Circle() {
return Circle.__super__.constructor.apply(this, arguments);
} Circle.prototype.radius = function() {
return this.width / 2;
}; Circle.prototype.computeArea = function() {
return Math.PI * Math.pow(this.radius, 2);
}; return Circle; })(Shape); showArea = function(shape) {
if (!(shape instanceof Shape)) {
throw new Error('showArea requires a Shape instance!');
}
return console.log(shape.computeArea());
}; showArea(new Square(2)); showArea(new Circle(2));

coffeeScript中类的多态[学习篇]的更多相关文章

  1. coffeeScript中类的继承[学习篇]

    只是在看深入浅出coffeescript中感觉真的很好,不光是coffe写法简单,生成的js也值得学习,废话不多说了,直接抄个书上的例子 class Pet constructor: -> @i ...

  2. OC学习篇之---总结和学习目录

    今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生 ...

  3. js学习篇1--数组

    javascript的数组可以包含各种类型的数据. 1. 数组的长度 ,直接用 length 属性; var arr=[1,2,3]; arr.length; js中,直接给数组的length赋值是会 ...

  4. [saiku] 源码整合[maven整合]

    saiku源码的整合分为[普通web项目整合]和[maven整合]两种 本节主要是讲解如何整合为maven项目 转载自:http://blog.csdn.net/gsying1474/article/ ...

  5. [terry笔记]Oracle会话追踪(二):TKPROF

    接上一笔记[terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046 http://www.cnblogs.com/kkterry/p/3279282.html ...

  6. [terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046

      SQL_TRACE/10046 事件是 Oracle 提供的用于进行 SQL 跟踪的手段,在日常的数据库问题诊断和解决中是非常常用的方法.但其生成的trace文件需要tkprof工具生成一个可供人 ...

  7. Tomcat集群配置学习篇-----分布式应用

    Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...

  8. (转载)OC学习篇之---概述

    前言 终于开启了OC的学习篇了,之前由于工作上的事,学习就一直搁浅了,不过最近由于各种原因,感觉必须要开启iOS的开发旅程了,不然就老了.因为之前一直是做Android的,所以学习iOS来就没那么费劲 ...

  9. 《Mysql 公司职员学习篇》 第二章 小A的惊喜

          第二章 小A的惊喜  ---- 认识数据库 吃完饭后,小Y和小A回到了家里,并打开电脑开始学习Mysql. 小Y:"小A,你平时的Excell文件很多的情况下,怎么样存放Exce ...

随机推荐

  1. em 和 px相互转换

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. softwareTesting_work2_question1

    input类 package com.Phantom; import java.util.ArrayList; import java.util.HashMap; import java.util.L ...

  3. 【Fine原创】JMeter分布式测试中踩过的那些坑

    最近因为项目需要,研究了性能测试的相关内容,并且最终选用了jmeter这一轻量级开源工具.因为一直使用jmeter的GUI模式进行脚本设计,到测试执行阶段工具本身对资源的过量消耗给性能测试带来了瓶颈, ...

  4. HANA学习笔记1-搭建HANA学习环境

    一 硬件环境     两台电脑,一台为服务器装跑HANA虚拟机,一台为客户端运行HANA_STUDIO     服务器:内存至少需要16G     windows server 2003 64位    ...

  5. (利用tempdata判断action是直接被访问还是重定向访问)防止微信活动中用户绕过关注公众号的环节

    说明:这个不是在进行微信公众号开发,也就是说在不能获取用户openid的前提下做的下面操作 1.动机:最近有个微信活动(关注了服务号的可以免费领取礼品),要做这么一个功能,活动的入口在微信服务号的菜单 ...

  6. linux 下 C语言显示中文

    例如:tset.c int main() { printf("你好,世界\n"); retuen 0; } 编译时应该这样: iconv -f gb2312 -t utf8 tes ...

  7. 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.

    刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.

  8. linux find

    find 命令用于查找文件系统中的指定文件,其命令格式为:find   要查找的路径   表达式例如:find . -name 1.txt      在当前目录及其子目录下查找文件 1.txtfind ...

  9. jquery div 下拉框焦点事件

    这章与上一张<jquery input 下拉框(模拟select控件)焦点事件>类似 这章讲述div的焦点事件如何使用 div的焦点事件与input的焦点事件区别在于 需要多添加一个属性: ...

  10. c# 引用百度地图

    <script type="text/javascript"> //创建和初始化地图函数 var map = new BMap.Map("home" ...