正确的JavaScript 6类型用于c#等价的struct

时间:2015-04-24 20:45:28

标签: 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中,class已被定义,但从我在网络上发现的内容来看,class似乎主要用于定义function class类似于EMCAScript 5 prototype的{​​{1}},而不是用于定义字段。

这样做的正确方法是什么?

我现在的想法就是:

function

我不相信这是一个意见问题。在大多数语言中,有一种正确的方法可以做到这一点。

在C#中执行此操作的方式是

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();

2 个答案:

答案 0 :(得分:2)

“最佳”方式非常主观。你会在这里和整个网络上看到不同的回答。看看你的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

JSFiddle Link

答案 1 :(得分:1)

在javascript中创建一个类似于您指定的结构的对象,并且能够重用该对象,尝试创建一个返回该对象模板的函数:

if (position == 3) {
    getResources().openRawResourceFd(songs[current_index]);
    myMediaPlayer.start();
}

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