《javascript权威指南》第9章 例9-8源码
//创建一个新的枚举类型
//不能使用它来创建该类型的新实例
function Enumeration(nameToValues){
var Enumeration = function(){throw "Can't Instantiate Enumerations";}; var proto = Enumeration.prototype = {
constructor: Enumeration,
toString: function(){return this.name;},
valueOf: function(){return this.value;},
toJSON: function(){return this.name;}
}; Enumeration.values = []; for(name in nameToValues){
var e = Object.create(proto);
e.name = name;
e.value = nameToValues[name];
Enumeration[name] = e;
Enumeration.values.push(e);
} Enumeration.foreach = function(f, c){
for(var i = 0; i < this.values.length; i++) f.call(c, this.values[i]);
}; return Enumeration;
} function Card(suit, rank){
this.suit = suit;
this.rank = rank;
} Card.Suit = Enumeration({Clubs:1, Diamonds:2, Hearts:3, Spades: 4});
Card.Rank = Enumeration({Two:2,Three:3,Four:4,Five:5,Six:6,
Seven:7,Eight:8,Nine:9,Ten:10,
Jack:11,Queen:12,King:13,Ace:14}); Card.prototype.toString = function(){
return this.rank.toString() + " of " + this.suit.toString();
}; Card.prototype.compareTo = function(that){
if(this.rank < that.rank) return -1;
if(this.rank > that.rank) return 1;
return 0;
}; Card.orderBySuit = function(a, b){
if(a.suit < b.suit) return -1;
if(a.suit > b.suit) return 1;
if(a.rank < b.rank) return -1;
if(a.rank > b.rank) return 1;
return 0;
} function Deck(){
var cards = this.cards = [];
Card.Suit.foreach(function(s){
Card.Rank.foreach(function(r){
cards.push(new Card(s, r));
});
});
} Deck.prototype.shuffle = function(){
var deck = this.cards, len = deck.length;
for(var i = len - 1; i > 0; i--){
var r = Math.floor(Math.random() * (i + 1)),
temp;
temp = deck[i], deck[i] = deck[r], deck[r] = temp;
} return this;
} Deck.prototype.deal = function(n){
if(this.cards.length < n) throw "Out of cards";
return this.cards.splice(this.cards.length - n, n);
} var deck = (new Deck()).shuffle();
var hand = deck.deal(13).sort(Card.orderBySuit); console.log(hand);
《javascript权威指南》第9章 例9-8源码的更多相关文章
- javascript权威指南第11章 DOM扩展
//javascript 权威指南 第三版 第11章 DOM扩展 //取得body元素 var body = document.querySelector("body"); //取 ...
- 【笔记】javascript权威指南-第六章-对象
对象 //本书是指:javascript权威指南 //以下内容摘记时间为:2013.7.28 对象的定义: 1.对象是一种复合值:将很多值(原始值或者对象)聚合在一起,可以通过名字访问这些值. ...
- 【笔记】javascript权威指南-第三章-类型,值和变量
javascript中的原始类型和对象类型(基本类型和引用类型) //本书是指:javascript权威指南 //以下内容摘记时间为:2013.7.27 计算机程序运行时需要对值(value ...
- javascript权威指南第16章 HTML5脚本编程
<!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...
- JavaScript权威指南--第3章 类型、值和变量
在编程语言中,能够表示并操作的值(value)的类型称作数据类型(type).使用变量来储存值.JavaScript中数据类型有两种:原始类型(primitive type/基本数据类型)和对象类型( ...
- JavaScript权威指南第02章 词法结构
词法结构 2.1字符集 JavaScript 是Unicode字符集编写,差点儿支持地球上全部的语言. 2.1.1区分大写和小写 javascript是区分大写和小写的语言. 2.1.2 空格.换行符 ...
- JavaScript权威指南第01章 JavaScript 概述
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/27951767 JavaScript 概 ...
- JavaScript权威指南第03章 类型、值和变量(1)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/27953481 类型.值和变量 数据类型 ...
- javascript权威指南第22章高级技巧
HTML <!DOCTYPE html> <html> <head> </head> <body> <div style=" ...
- javascript权威指南第20章 JSON
//20.1 语法 //JAVASCRIPT 是对JSON数据支持的. //JSON 可以申明三种类型的值 简单值("hello world") 对象({"name&qu ...
随机推荐
- Linux下的QQ折腾记
用Linux最重要是要把QQ装好了,webqq很不好用.qq for linux是古董,Linux还是悲惨,很多软件有windows版本,有mac版本,就是不出linux版本.只好用wine来 ...
- UML建模之活动图介绍(Activity Diagram)
一.活动图的组成元素 Activity Diagram Element 1.活动状态图(Activity) 2.动作状态(Actions) 3.动作状态约束(Action Constraints) ...
- AES - Rijndael 算法(三)
四.Rijndael算法实现,java版本 public class Rijndael_Algorithms { private byte[] key; /**------------------ ...
- 关于LOAD DATA INFILE 命令的使用问题解决
通过LOAD DATA方式将数据导入数据表中 LOAD DATA INFILE '输入文件的路径及文件名' INTO TABLE 要导入表的表名称; LOAD DATA INFILE 'G:/p.tx ...
- C语言自动类型转换
自动转换遵循以下规则: 1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 2) 转换按数据长度增加的方向进行,以保证精度不降低.(eg:int型和long型运算时,先把int量转成lo ...
- Highcharts 异步加载数据曲线图表
导入 data.js 文件 异步加载数据需要引入以下js 文件: <script src="http://code.highcharts.com/modules/data.js&quo ...
- [深入React] 8.refs
我们可以从 this.refs.xxx 获取到对象,有俩种情况: <input type="text" ref="name"/> 取到的是DOM元素 ...
- mysql中pager命令妙用
pager命令的妙用在mysql,可以大大提高工作效率. 一 当处理大量数据时,不想显示查询的结果,而只需知道查询话费的时间. mysql> select * from t3; +----- ...
- 自适应网页设计(Responsive Web Design)(转)
作者: 阮一峰 出处:http://www.ruanyifeng.com/blog/2012/05/responsive_web_design.html 随着3G的普及,越来越多的人使用手机上网. 移 ...
- 利用JasperReport+iReport进行Web报表开发
用JasperReport+iReport进行Web报表开发 序言 在非常多实际的项目里,报表都是当中十分重要的组成部分,比如把查询结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥 ...