【发布时间】:2015-07-19 07:55:49
【问题描述】:
我有这样的功能:
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;
}
【问题讨论】:
-
这是 ES5 规范的相关部分:11.1.5 - Object initializer。
-
@joews:有点神秘,但我认为它们是按顺序评估的。谢谢。
-
@joews 他想要一个保证,而不是学术猜测
-
猜测?如果有有答案,它就在该文档中。我无法破译该部分,因此我在帮助中发布了一个链接,它将帮助其他人回答问题。
-
如果您编写的代码期望驻留在对象初始值设定项的值侧的函数/方法调用以特定顺序调用(由于副作用),那么我建议您停止这样做并以所需的顺序逐行编写特定的代码。为什么要编写如此困难的代码来了解是否所有 Javascript 实现的行为方式完全相同?如果顺序很重要,并且并非 100% 明显所有实现都使用初始化器执行您想要的操作,那么请注意安全并自己编写顺序。
标签: javascript node.js object