更正JavaScript 6类型以用于c#等效结构

更正JavaScript 6类型以用于c#等效结构,javascript,design-patterns,data-structures,Javascript,Design Patterns,Data Structures,多年来,我主要在C#中工作,现在仍然习惯于使用JavaScript 我有一个要实例化的对象。对象中始终有相同的7个字段。它用于轻松地将一组7个数字传递给各种函数 var myObj = { 4: 0, 6: 0, 8: 0, 10: 0, 12: 0, 20: 0, 100: 0 }; 在EMCAScript 6中,已经定义了类es,但从我在web上的发现来看,类es似乎主要用于定义类上的函数,类似于EMCAScript 5函数的原型,

多年来,我主要在C#中工作,现在仍然习惯于使用JavaScript

我有一个要实例化的对象。对象中始终有相同的7个字段。它用于轻松地将一组7个数字传递给各种函数

var myObj = { 
    4: 0,
    6: 0,
    8: 0,
    10: 0,
    12: 0,
    20: 0,
    100: 0
};
在EMCAScript 6中,已经定义了
es,但从我在web上的发现来看,
es似乎主要用于定义
上的
函数
,类似于EMCAScript 5
函数
原型
,而不是用于定义字段

正确的方法是什么

我现在的想法是:

var myObj = function () {
    this[4] = 0;
    this[6] = 0;
    this[8] = 0;
    this[10] = 0;
    this[12] = 0;
    this[20] = 0;
    this[100] = 0;
};

var obj = new myObj();
我不认为这是一个意见问题。在大多数语言中,有一种正确的方法可以做到这一点

你在C#中这样做的方式是


要在javascript中创建与指定结构相似的对象并能够重用该对象,请尝试创建一个返回该对象模板的函数:

function createMyObj() {

    return { 
        "4": 0,
        "6": 0,
        "8": 0,
        "10": 0,
        "12": 0,
        "20": 0,
        "100": 0
    };

}
javascript中有许多不同的创作模式,这取决于您的需要。您需要对象层次结构吗?然后使用原型模式。您是否需要一个接受默认参数的对象创建,有点像构造函数?然后使用一个类似于我上面指定的实现,但修改它以接受一个defaultValues对象,该对象包含您需要指定的部分或所有属性。

最好的方法是非常主观的。你会在这里和网上看到不同的答案。看看您的C#示例,如果您的目标是以面向对象的方式复制类似于该类的东西,那么这可能是一个很好的起点

function MyObj () { 
    this.Fours = 0;
    this.Sixes = 0;
    this.Eights = 0;
    this.Tens = 0;
    this.Twelves = 0;
    this.Twenties = 0;
    this.Hundreds = 0;
    this.RollDice = function() {
        console.log('here is a function')
    }
};

样本使用

var myObj = new MyObj();

console.log(myObj); // -- MyObj {Fours: 0, Sixes: 0, etc...

myObj.RollDice();   // -- here is a function

为什么不能有一个对象,比如第一个代码段呢?Javascript是一种原型语言。在我看来,原型的本质不应该被改变;它应该受到欢迎。不,我也不认为这是一种观点。向语言中添加类是为了让古典主义者更熟悉它,但这并不意味着它是最好的方法。嘎。不要在你的文章中添加“编辑”来标点你的编辑。这不是一个论坛。这里的所有帖子都有详细的编辑历史记录,任何人都可以查看。这篇文章的编辑历史记录就在这里。如果这只是一组数字,为什么不在Javascript中使用数组呢?数组是稀疏数组(或多或少)。它们不是真的数组;最接近的模拟是哈希表。当您向它们提供数字索引时,Javascript会将该索引转换为字符串并查找相应的键/值对。就最佳实践而言,我建议您坚持使用有效的Javascript名称(特别是,不要以数字开头)。在我的特殊情况下,使用数字作为键非常有用,因为我可以从
1..key
dice[key]
时间中随机抽取数字,然后将它们相加。这里有一种方法,使用Sal的答案作为起点,包括滚动和输出,因为我们讨论的是最佳实践。我同意这一点。就像我说的,有很多选择。但是,与C#类相比,在这种风格中,
this.RollDice
几乎可以镜像我在字段后定义的
void RollDice()
方法。无论如何,至少有趣一点,OP肯定会喜欢学习和探索。我用了你的代码并添加了一些有用的函数:来展示JavaScript如何作为一种面向对象的语言工作。@JasonPerske谢谢你的输入,这里肯定有一些好东西!
var myObj = new MyObj();

console.log(myObj); // -- MyObj {Fours: 0, Sixes: 0, etc...

myObj.RollDice();   // -- here is a function