Welcome

首页 / 脚本样式 / JavaScript / JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用

如下所示:
//实现枚举类型,扑克牌应用function creatEnum(p){//构造函数var Enumeration = function(){throw "can not Instantiate Enumerations";};//重写原型并将原型赋值给变量protovar 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,值为对象oEnumeration.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学习笔记整理_简单实现枚举类型,扑克牌应用的全部内容了,希望对大家有所帮助,多多支持脚本之家~