//创建一个新的枚举类型
//不能使用它来创建该类型的新实例
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源码的更多相关文章

  1. javascript权威指南第11章 DOM扩展

    //javascript 权威指南 第三版 第11章 DOM扩展 //取得body元素 var body = document.querySelector("body"); //取 ...

  2. 【笔记】javascript权威指南-第六章-对象

    对象 //本书是指:javascript权威指南    //以下内容摘记时间为:2013.7.28 对象的定义: 1.对象是一种复合值:将很多值(原始值或者对象)聚合在一起,可以通过名字访问这些值. ...

  3. 【笔记】javascript权威指南-第三章-类型,值和变量

    javascript中的原始类型和对象类型(基本类型和引用类型) //本书是指:javascript权威指南    //以下内容摘记时间为:2013.7.27   计算机程序运行时需要对值(value ...

  4. javascript权威指南第16章 HTML5脚本编程

    <!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...

  5. JavaScript权威指南--第3章 类型、值和变量

    在编程语言中,能够表示并操作的值(value)的类型称作数据类型(type).使用变量来储存值.JavaScript中数据类型有两种:原始类型(primitive type/基本数据类型)和对象类型( ...

  6. JavaScript权威指南第02章 词法结构

    词法结构 2.1字符集 JavaScript 是Unicode字符集编写,差点儿支持地球上全部的语言. 2.1.1区分大写和小写 javascript是区分大写和小写的语言. 2.1.2 空格.换行符 ...

  7. JavaScript权威指南第01章 JavaScript 概述

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/27951767 JavaScript 概 ...

  8. JavaScript权威指南第03章 类型、值和变量(1)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/27953481 类型.值和变量 数据类型 ...

  9. javascript权威指南第22章高级技巧

    HTML <!DOCTYPE html> <html> <head> </head> <body> <div style=" ...

  10. javascript权威指南第20章 JSON

    //20.1 语法 //JAVASCRIPT 是对JSON数据支持的. //JSON 可以申明三种类型的值 简单值("hello world") 对象({"name&qu ...

随机推荐

  1. QQ登录-第三方SDK的接入总结(搜索 qq互联)

    由于项目的需要,使用了[QQ登录]SDK 的相关功能!   1.集成[QQ登录]SDK   [QQ登录]SDK下载地址: http://wiki.open.qq.com/wiki/website/SD ...

  2. Resharper TAB 傻吊

    直接把tools中的模板全选删除掉!

  3. 【转】secureCRT使用退格键(backspace)出现^H解决办法

    原文网址:http://skykiss.blog.51cto.com/blog/2892603/769771 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将 ...

  4. 【Ruby on Rails 学习一】ubuntu14.04配置rvm与ruby

    要安装ruby,首先要安装rvm,借助rvm安装ruby rvm 的全称是 Ruby Version Manager ,是一款由 Wayne E. Seguin  开发的一款命令行工具.rvm 能够让 ...

  5. 让你的java开发变得如此 Smart

    http://my.oschina.net/huangyong/blog/196408

  6. [Angular 2] Property Binding

    Property Binding is bind property NOT attribute! import {Component, Input, Output, EventEmitter} fro ...

  7. Codeforces 328A-IQ Test(数列)

    A. IQ Test time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  8. c++11 : Local and Unnamed Types as Template Arguments

    In N2402, Anthony Williams proposes that local types, and unnamed types be usable as template argume ...

  9. USB HID Report Descriptor 报告描述符详解

    Report descriptors are composed of pieces of information. Each piece of information is called an Ite ...

  10. mybatis知识总结

    基于昨天的mybatis入门详解,今天我们再来看看mybatis稍微高深些的知识点. 1.解决Model属性和数据库字段不一致的问题 1),开启驼峰命名 2),使用resultMap进行映射, < ...