coffeeScript中类的多态[学习篇]
2016-07-28 22:34
302 查看
类的一大应用就是多态。多态是一个面向对象编程的高级术语----“一个东西可编程很多不同的东西,但不是任何东西”。[引自coffeescript深入浅出]
生成的javascript
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));
相关文章推荐
- JavaScript进阶篇笔记(一)
- CSS3备忘
- coffeeScript中类的继承[学习篇]
- Protocol Buffers v3.0.0编译安装小记
- bootstrap-table使用总结
- JavaScript高级函数-----惰性函数
- ubuntu下编译caffe
- 我的javascript之路之循环
- HTNL5浮动问题
- ServletJsp之登录界面
- Undefined symbols for architecture x86_64: "_SDL_main", referenced from:报错
- 超好用的json解析工具——Gson项目使用详解
- HTML5 CSS 结构
- 比Gson解析速度快10倍!——Json解析神器Jackson使用介绍
- React心得
- CSS居中
- jQuery操作DOM基础 - 元素属性的查看与设置
- json详解
- JAVASCRIPT:STRING类型
- BZOJ1015 [JSOI2008]星球大战starwar