JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用


Posted in Javascript onSeptember 19, 2016

如下所示:

//实现枚举类型,扑克牌应用
function creatEnum(p){
  //构造函数
  var Enumeration = function(){throw 'can not Instantiate Enumerations';};
  //重写原型并将原型赋值给变量proto
  var proto = Enumeration.prototype = {
    constructor:Enumeration,
    toString:function(){return this.name;},
    valueOf:function(){return this.value;},
    toJSON:function(){return this.name;}
  };
  //添加类属性,方法
  Enumeration.values = [];
  for(var n in p){ //将对象p的每个元素都单独转存到一个单独的对象o里面,并将这些对象o存入类属性values数组中
    var o = Object.create(proto); //对象o继承了Enumeration的3个实例方法和构造函数
    Enumeration.prototype.valueOf = function(){return this.value*1;}; //重写原型的valueof方法
    o.name = n;
    o.value = p[n];
    Enumeration[n] = o; //添加类属性name,值为对象o
    Enumeration.values.push(o);
  }
  Enumeration.foreach = function (f,c) {
    for(var i =0;i<this.values.length;i++){
      f.call(c,this.values[i]);
    }
  };
  return Enumeration;
}
//===
var Coin = creatEnum( {Penny:1,Nickel:5,Dime:10,Quarter:25} );
console.log(Coin);
/*结果:枚举对象Coin
 { [Function]
 values:
 [ { [Number: 10] name: 'Penny', value: 1 },
   { [Number: 50] name: 'Nickel', value: 5 },
   { [Number: 100] name: 'Dime', value: 10 },
   { [Number: 250] name: 'Quarter', value: 25 } ],
 Penny: { [Number: 10] name: 'Penny', value: 1 },
 Nickel: { [Number: 50] name: 'Nickel', value: 5 },
 Dime: { [Number: 100] name: 'Dime', value: 10 },
 Quarter: { [Number: 250] name: 'Quarter', value: 25 },
 foreach: [Function] }
 */
console.log(Coin.Dime+2); //102 Coin.Dime本身继承自枚举对象,继承并修改了valueof方法用来将value转化为数字做计算
 
//===使用函数creatEnum()来表示一副54张的扑克牌==
function Card(suit,rank){
  this.suit = suit;
  this.rank = rank;
}
Card.Suit = creatEnum( {Clubs:1,Diamonds:2,Heates:3,Spades:4,Joker:5} );
Card.Rank = creatEnum( {Three:3,Four:4,Five:5,Six:6, Seven:7,Eight:8,Nine:9,Ten:10,
            Jack:11,Queen:12,King:13,Ace:14,Two:15,SmallJoker:16,BigJoker:17} );
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;
  return 0;
};
Card.orderByRank = function(a,b){
  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){ //对每个花色执行
    if(s!=5) {
      Card.Rank.foreach(function (r) {
        if (r != 16 && r != 17) {
          cards.push(new Card(s, r));
        }
      });
    }else{
      Card.Rank.foreach(function (r){
        if(r == 16) cards.push(new Card(s, r));
        if(r == 17) 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();
var deck1 =deck.shuffle();
var n = 17;
var hand1 = deck1.deal(n).sort(Card.orderByRank);
for(var i = 0;i<n;i++){
  var body = document.getElementById('body');
  var div = document.createElement('div');
  div.style.width = '50px';
  div.style.height = '100px';
  div.style.border = '1px solid gray';
  div.style.float = 'left';
  div.innerHTML = hand1[i].suit.name+' '+hand1[i].rank.name;
  body.appendChild(div);
  console.log(hand1[i].suit.name+' '+hand1[i].rank.name);
}

以上就是小编为大家带来的JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用的全部内容了,希望对大家有所帮助,多多支持三水点靠木~

Javascript 相关文章推荐
JavaScript操作XML 使用百度RSS作为新闻源示例
Feb 17 Javascript
JS实现的省份级联实例代码
Jun 24 Javascript
javascript移出节点removeChild()使用介绍
Apr 03 Javascript
jquery.validate.js插件使用经验记录
Jul 02 Javascript
简单易懂的天气插件(代码分享)
Feb 04 Javascript
JavaScript基本类型值-Number类型
Feb 24 Javascript
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
4个顶级开源JavaScript图表库
Sep 29 Javascript
浅谈JavaScript闭包
Apr 09 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
Jun 12 jQuery
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
JS Canvas接口和动画效果大全
Apr 29 Javascript
JavaScript学习笔记整理_关于表达式和语句
Sep 19 #Javascript
javascript学习笔记_浅谈基础语法,类型,变量
Sep 19 #Javascript
js中用cssText设置css样式的简单方法
Sep 19 #Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
Sep 19 #Javascript
基于jQuery实现中英文切换导航条效果
Sep 18 #Javascript
jQuery EasyUI常用数据验证汇总
Sep 18 #Javascript
jQuery EasyUI封装简化操作
Sep 18 #Javascript
You might like
PHP生成条形码大揭秘
2015/09/24 PHP
js动态设置鼠标事件示例代码
2013/10/30 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
三万活动总结
2014/04/28 职场文书
欢迎横幅标语
2014/06/17 职场文书
2014年信访工作总结
2014/11/17 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫