这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
下面小编就为大家带来一篇 JavaScript 学习笔记整理_简单实现枚举类型, 扑克牌应用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
如下所示:
- //实现枚举类型,扑克牌应用
- 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 学习笔记整理_简单实现枚举类型, 扑克牌应用的全部内容了,希望对大家有所帮助,多多支持 phperz~
来源: http://www.phperz.com/article/17/0516/331771.html