coffeeScript中类的多态[学习篇]
类的一大应用就是多态。多态是一个面向对象编程的高级术语----“一个东西可编程很多不同的东西,但不是任何东西”。[引自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中类的多态[学习篇]的更多相关文章
- coffeeScript中类的继承[学习篇]
只是在看深入浅出coffeescript中感觉真的很好,不光是coffe写法简单,生成的js也值得学习,废话不多说了,直接抄个书上的例子 class Pet constructor: -> @i ...
- OC学习篇之---总结和学习目录
今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生 ...
- js学习篇1--数组
javascript的数组可以包含各种类型的数据. 1. 数组的长度 ,直接用 length 属性; var arr=[1,2,3]; arr.length; js中,直接给数组的length赋值是会 ...
- [saiku] 源码整合[maven整合]
saiku源码的整合分为[普通web项目整合]和[maven整合]两种 本节主要是讲解如何整合为maven项目 转载自:http://blog.csdn.net/gsying1474/article/ ...
- [terry笔记]Oracle会话追踪(二):TKPROF
接上一笔记[terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046 http://www.cnblogs.com/kkterry/p/3279282.html ...
- [terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046
SQL_TRACE/10046 事件是 Oracle 提供的用于进行 SQL 跟踪的手段,在日常的数据库问题诊断和解决中是非常常用的方法.但其生成的trace文件需要tkprof工具生成一个可供人 ...
- Tomcat集群配置学习篇-----分布式应用
Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...
- (转载)OC学习篇之---概述
前言 终于开启了OC的学习篇了,之前由于工作上的事,学习就一直搁浅了,不过最近由于各种原因,感觉必须要开启iOS的开发旅程了,不然就老了.因为之前一直是做Android的,所以学习iOS来就没那么费劲 ...
- 《Mysql 公司职员学习篇》 第二章 小A的惊喜
第二章 小A的惊喜 ---- 认识数据库 吃完饭后,小Y和小A回到了家里,并打开电脑开始学习Mysql. 小Y:"小A,你平时的Excell文件很多的情况下,怎么样存放Exce ...
随机推荐
- Java收藏
1.某大神的cnblogs博客关于java的随笔分类:http://www.cnblogs.com/viviman/category/444566.html 2.某大神的cnblogs博客关于java ...
- i++与++i
#include <stdio.h> int main() { int a,b,c,d; a = 10; b = a++;//相当于两个句子:b = a,a += 1;先使用a的值再加1 ...
- java filechannel大文件的读写
java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/ java 读取一个 ...
- UE4 执行Console Command ----ExecuteConsoleCommand
void UKismetSystemLibrary::ExecuteConsoleCommand(UObject* WorldContextObject, const FString& Com ...
- google vr开源 cardboard
https://developers.google.com/cardboard/android/ 待续
- block,inline和inline-block概念和区别(转)
转自 http://www.cnblogs.com/KeithWang/p/3139517.html 总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-lev ...
- JAVA并发框架之Semaphore实现生产者与消费者模型
分类: Java技术 锁和信号量(Semaphore)是实现多线程同步的两种常用的手段.信号量需要初始化一个许可值,许可值可以大于0,也可以小于0,也可以等于0. 如果大于0,表示 ...
- 原创: How to build a query based on Definition Updates installed
In SCCM 2012 R2, you can use following class. Use SMS_CombinedDeviceResources.EPAntivirusSignatureLa ...
- http 学习 1-1 chapter1-HTTP概述
Web浏览器.服务器和相关的Web应用程序都是通过HTTP相互通信的.HTTP是现代全球因特网中使用的公共语言. 1.1HTTP – 因特网的多媒体信使 HTTP使用的是可靠的数据传输协议,确保数据在 ...
- linux grep,sed,awk和diff的使用
1:grep//显示行 # grep 'main' /home/myhome/a.c//将a.c含有main的行显示出来 # grep -v 'main' /home/myhome/a.c //显示除 ...