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 相关文章推荐
jquery 必填项判断表单是否为空的方法
Sep 14 Javascript
javascript css在IE和Firefox中区别分析
Feb 18 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
Apr 26 Javascript
JavaScript的类型、值和变量小结
Jul 09 Javascript
轻松实现javascript数据双向绑定
Nov 11 Javascript
BootStrap智能表单实战系列(七)验证的支持
Jun 13 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
Jun 14 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
Sep 04 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
Jun 09 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
May 24 jQuery
微信小程序功能之全屏滚动效果的实现代码
Nov 22 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
Jun 01 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 URL路由类实例
2013/11/12 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
python设置随机种子实例讲解
2019/09/12 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
使用Python函数进行模块化的实现
2019/11/15 Python
python mysql中in参数化说明
2020/06/05 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
全球度假村:Club Med
2017/11/27 全球购物
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
《黄河颂》教学反思
2014/02/07 职场文书
创建青年文明号材料
2014/05/09 职场文书
中学生运动会口号
2014/06/07 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
放假通知范文
2015/04/14 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers