使用构造函数在JavaScript中初始化(从C#转换)
Class in JavaScript with a constructor (Converting from C#)
我有下面的C#代码,可以简单地转换为JavaScript吗?我需要这个在浏览器中100%运行。
据我所知,枚举不存在,可以用字符串代替。
简而言之,我有一个等级牌组女巫持有一组牌,该等级牌确实有一些属性,包括等级、符号等,还有一个洗牌功能。
我不希望有人在这里转换我所有的代码,但给我一个指针,告诉我如何做类似的事情。
public enum Suit
{
Club,
Diamond,
Heart,
Spade
};
public class Card
{
public Suit suit;
public int value;
public string text;
public int HCP;
public Card()
{
}
public Card(Suit _suit, int _value, int _HCP, string _text)
{
suit = _suit;
value = _value;
HCP = _HCP;
text = _text;
}
};
public class Deck
{
public Card[] Cards = new Card[52];
public Deck()
{
Cards[0] = new Card(Suit.Spade, 14, 4, "A");
Cards[1] = new Card(Suit.Spade, 13, 3, "K");
Cards[2] = new Card(Suit.Spade, 12, 2, "Q");
Cards[3] = new Card(Suit.Spade, 11, 1, "J");
Cards[4] = new Card(Suit.Spade, 10, 0, "T");
Cards[5] = new Card(Suit.Spade, 9, 0, "9");
Cards[6] = new Card(Suit.Spade, 8, 0, "8");
Cards[7] = new Card(Suit.Spade, 7, 0, "7");
Cards[8] = new Card(Suit.Spade, 6, 0, "6");
Cards[9] = new Card(Suit.Spade, 5, 0, "5");
Cards[10] = new Card(Suit.Spade, 4, 0, "4");
Cards[11] = new Card(Suit.Spade, 3, 0, "3");
Cards[12] = new Card(Suit.Spade, 2, 0, "2");
Cards[13] = new Card(Suit.Heart, 14, 4, "A");
Cards[14] = new Card(Suit.Heart, 13, 3, "K");
Cards[15] = new Card(Suit.Heart, 12, 2, "Q");
Cards[16] = new Card(Suit.Heart, 11, 1, "J");
Cards[17] = new Card(Suit.Heart, 10, 0, "T");
Cards[18] = new Card(Suit.Heart, 9, 0, "9");
Cards[19] = new Card(Suit.Heart, 8, 0, "8");
Cards[20] = new Card(Suit.Heart, 7, 0, "7");
Cards[21] = new Card(Suit.Heart, 6, 0, "6");
Cards[22] = new Card(Suit.Heart, 5, 0, "5");
Cards[23] = new Card(Suit.Heart, 4, 0, "4");
Cards[24] = new Card(Suit.Heart, 3, 0, "3");
Cards[25] = new Card(Suit.Heart, 2, 0, "2");
Cards[26] = new Card(Suit.Diamond, 14, 4, "A");
Cards[27] = new Card(Suit.Diamond, 13, 3, "K");
Cards[28] = new Card(Suit.Diamond, 12, 2, "Q");
Cards[29] = new Card(Suit.Diamond, 11, 1, "J");
Cards[30] = new Card(Suit.Diamond, 10, 0, "T");
Cards[31] = new Card(Suit.Diamond, 9, 0, "9");
Cards[32] = new Card(Suit.Diamond, 8, 0, "8");
Cards[33] = new Card(Suit.Diamond, 7, 0, "7");
Cards[34] = new Card(Suit.Diamond, 6, 0, "6");
Cards[35] = new Card(Suit.Diamond, 5, 0, "5");
Cards[36] = new Card(Suit.Diamond, 4, 0, "4");
Cards[37] = new Card(Suit.Diamond, 3, 0, "3");
Cards[38] = new Card(Suit.Diamond, 2, 0, "2");
Cards[39] = new Card(Suit.Club, 14, 4, "A");
Cards[40] = new Card(Suit.Club, 13, 3, "K");
Cards[41] = new Card(Suit.Club, 12, 2, "Q");
Cards[42] = new Card(Suit.Club, 11, 1, "J");
Cards[43] = new Card(Suit.Club, 10, 0, "T");
Cards[44] = new Card(Suit.Club, 9, 0, "9");
Cards[45] = new Card(Suit.Club, 8, 0, "8");
Cards[46] = new Card(Suit.Club, 7, 0, "7");
Cards[47] = new Card(Suit.Club, 6, 0, "6");
Cards[48] = new Card(Suit.Club, 5, 0, "5");
Cards[49] = new Card(Suit.Club, 4, 0, "4");
Cards[50] = new Card(Suit.Club, 3, 0, "3");
Cards[51] = new Card(Suit.Club, 2, 0, "2");
}
public void Shuffle(Random r)
{
for (int n = Cards.Length - 1; n > 0; --n)
{
int k = r.Next(n + 1);
Card temp = Cards[n];
Cards[n] = Cards[k];
Cards[k] = temp;
}
}
};
枚举可以转换为哈希:
var Suit = {
Club: 0,
Diamond: 1,
Heart: 2,
Spade: 4
};
Card
类非常简单:
function Card(suit, value, hcp, text) {
this.suit = suit;
this.value = value;
this.hcp = hcp;
this.text = text;
}
还有Deck
:
function Deck() {
this.cards = [
new Card(Suit.Heart, 14, 4 "A"),
new Card(Suit.Heart, 13, 3 "K"),
// ...
];
}
然后将shuffle
添加到Deck
:
Deck.prototype.shuffle = function() {
this.cards.sort(function() { return 0.5 - Math.random() });
};
在JavaScript中没有任何类的概念。创建一个对象,直接向对象添加属性和方法。
看看这里。
var Suit = {
Club: 1,
Diamond: 2,
Heart: 3,
Spade: 4
};
var Card = function (_suit, _value, _HCP, _text) {
this.suit = _suit;
this.value = _value;
this.HCP = _HCP;
this.text = _text;
};
var myCard = new Card(Suit.Club, 1, 0, "kkkj");
我建议阅读http://javascript.crockford.com/private.html开始
我将尝试用纯JS为您提供一个更通用的映射。(如果你想认真模拟类似传统的类在JS中,您应该使用库)
1. Enum
C++: JS:
enum E{ A,B }; var E = { A:0, B:1 };
2. Class
C++: JS:
class C{ function C(a,b){
int a,b; this.a = a;// When a function is called with new,
C(int a,int b){ this.b = b;// it will be considered a constructor
this->a = a; } // and the this in it will be a new object.
this->b = b; // Objects are open: any object.name = something
} // is valid and can be read afterwards
int sum(){ C.prototype.sum = function(){
return a + b; return this.a + this.b; // There are no real classes
} } // in JS, only objects
// that were constructed
} // the same way.
// That is why things shared
// by all instances are put in a
// special place; the prototype
// (methods are shared by all instances
// if you think about it; it is always
// the same function, just different
// implicit this parameter)
3. Use
C++: JS:
unique_ptr<C*> c = new C(1,2); var c = new C(1,2);
c->sum(); c.sum();
4. Array
C++ JS:
char arr[32]; var arr = []; // Create empty array
arr[0]=2; arr[3] = 4; // You can safely assign anywhere, the array will
// grow and be filled with undefined if necessary
相关文章:
- 使用javascript函数在页面初始化后加载jquery
- 未捕获错误:无法在初始化之前调用方法;
- 如何在剑道网格初始化后设置pageSizes
- React redux初始化功能,无论状态变化如何
- 为什么可以't Protractor在自动初始化的Angular网站上查找Angular
- 尝试初始化()Spine's控制器和故障
- Angular.js延迟控制器初始化
- 对插件初始化后动态加载的元素进行样式设置
- Angular JS控制器初始化错误
- 在XMLHttpRequest之后重新初始化jQuery
- ember-js组件初始化不同的函数
- Youtube JavaScript API不是't正在初始化
- 函数无法识别初始化的变量
- datepicker引导程序再次初始化
- 在路线转换后重新初始化物料控制器
- D3-初始化后第一次转换时出现问题
- 使用构造函数在JavaScript中初始化(从C#转换)
- TweenMax赢得't正确初始化:“;未捕获无法在空目标之间进行转换&”;
- 当从ember.js1.11.3升级到1.12以删除弃用警告时,我如何将这些初始化程序转换为实例初始化程序
- 如何将静态初始化转换为动态初始化