我有这样的功能:
parsers[1] = function(buf) {
return {
type: "init",
name: buf.readUTF8String(),
capacity: buf.readUInt32(),
port: buf.readUInt16()
};
}
我是否可以保证name
,capacity
和port
将一个接一个地初始化?否则,将以错误的顺序读取缓冲区。
我当然可以依靠:
parsers[1] = function(buf) {
var ret = {type: "init"};
ret.name = buf.readUTF8String();
ret.capacity = buf.readUInt32();
ret.port = buf.readUInt16();
return ret;
}
答案 0 :(得分:3)
感谢@joews的评论,我可以回答我自己的问题。
<强>语法强>
ObjectLiteral :
{}
{PropertyNameAndValueList}
{PropertyNameAndValueList,}
PropertyNameAndValueList :
PropertyAssignment
PropertyNameAndValueList,PropertyAssignment
简而言之,对象构造函数将任何内容,初始化值列表或初始化值列表后跟逗号作为参数。
初始化值列表由PropertyAssignment
或初始化值列表后跟PropertyAssignment
组成,基本上是递归列表PropertyAssignment
。
现在问题出在上一个PropertyNameAndValueList , PropertyAssignment
,是否有一个特定的顺序来评估这两个组件?
制作 PropertyNameAndValueList:PropertyNameAndValueList,PropertyAssignment 评估如下:
让
obj
成为评估 PropertyNameAndValueList 的结果。让
propId
成为评估 PropertyAssignment 的结果。- 醇>
...
如果2.
肯定会跟随1.
,则会保证订单。
规范通常使用编号列表来指定算法中的步骤。这些算法用于精确指定ECMAScript语言结构所需的语义。算法并不意味着暗示使用任何特定的实现技术。在实践中,可能有更有效的算法可用于实现给定的功能。
...
为了清晰表达,算法步骤可以细分为顺序子步骤。
因此,预期的初始化顺序是元素之后的元素,来自我可以收集的内容。
答案 1 :(得分:0)
和许多其他语言一样,我不会依赖任何&#34;命令&#34;对象的属性,或者初始化或赋值的方式。
如果&#34;外部&#34;顺序是必要的,我会尝试通过这些属性的映射来实现。