JavaScript學(xué)習(xí)筆記整理_簡單實(shí)現(xiàn)枚舉類型,撲克牌應(yīng)用
如下所示:
//實(shí)現(xiàn)枚舉類型,撲克牌應(yīng)用 function creatEnum(p){ //構(gòu)造函數(shù) 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的每個元素都單獨(dú)轉(zhuǎn)存到一個單獨(dú)的對象o里面,并將這些對象o存入類屬性values數(shù)組中 var o = Object.create(proto); //對象o繼承了Enumeration的3個實(shí)例方法和構(gòu)造函數(shù) 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); /*結(jié)果:枚舉對象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轉(zhuǎn)化為數(shù)字做計算 //===使用函數(shù)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; }; //定義一副標(biāo)準(zhǔn)撲克牌 function Deck(){ var cards = this.cards = []; Card.Suit.foreach(function(s){ //對每個花色執(zhí)行 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; }; //發(fā)牌,并返回牌的數(shù)組 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); }
以上就是小編為大家?guī)淼腏avaScript學(xué)習(xí)筆記整理_簡單實(shí)現(xiàn)枚舉類型,撲克牌應(yīng)用的全部內(nèi)容了,希望對大家有所幫助,多多支持腳本之家~
相關(guān)文章
深入理解JavaScript中的對象復(fù)制(Object Clone)
下面小編就為大家?guī)硪黄钊肜斫釰avaScript中的對象復(fù)制(Object Clone)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05Javascript學(xué)習(xí)筆記4 Eval函數(shù)
在初學(xué)JS的時候就知道這個函數(shù),卻一直沒有了解過他的用途,也一直都是睜一只眼閉一只眼,這次來深入地了解一下這個函數(shù)的作用。2010-01-01JavaScript學(xué)習(xí)筆記(一) js基本語法
JavaScript學(xué)習(xí)筆記(一) js基本語法,想要學(xué)習(xí)js的朋友可以參考下。2011-10-10簡單總結(jié)JavaScript中的String字符串類型
就像其他語言那樣,js中的字符串類型可以表示一串字符,由雙引號包住,這里簡單總結(jié)JavaScript中的String字符串類型的一些基礎(chǔ)知識2016-05-05JavaScript數(shù)據(jù)類型之基本類型和引用類型的值
這篇文章主要介紹了JavaScript數(shù)據(jù)類型之基本類型和引用類型的值,本文講解了動態(tài)的屬性、復(fù)制變量值、傳遞參數(shù)、檢測類型等內(nèi)容,需要的朋友可以參考下2015-04-04Javascript學(xué)習(xí)筆記之 函數(shù)篇(三) : 閉包和引用
本系列好久沒更新了,今天重新拿過來,繼續(xù)前面未完成的事項,本文我們就來談?wù)凧avascript 中一個最重要的特性--閉包的使用引用。2014-11-11