对于我正在处理的项目,我正在构建一些具有以下布局的数据对象(这是我正在使用 ArrayBuffers 读取的二进制文件:
AFile.prototype = {
p: new BufferPack(),
filedata: null,
position: 0,
label_records: null,
closestmultipleof: function(n,v) {
return Math.ceil((v / n) * n);
},
r: function(size) {
result = new Uint8Array(this.filedata,this.position,size);
this.position += size;
return result;
}
readValueLabel: function() {
return {
value: this.rS(8),
len: this.rS8(),
label: this.rS(this.closestmultipleof(8, this.len + 1))
};
},
readLabelRecords: function() {
return {
rec_type: this.rS32(),
label_count: this.rS32(),
value_labels: _.map(_.range(this.label_count), function(num) {
console.debug(num);
},this)
};
},
loadFile: function(blob) {
this.filedata = blob;
this.label_records = this.readLabelRecords();
}
};
但是,我似乎在访问返回范围内的值时遇到了问题。在某些返回作用域中,我需要访问同一作用域中的变量以便稍微操作数据(参见 value_labels 的定义)。
只是,它似乎无法访问那里的变量 label_count (可能是因为它在相同的返回范围内)。我怎么能做到这一点?
我可以让它工作的唯一方法是如果我这样做:
ret = {}
ret['a'] = 5;
ret['b'] = ret['a'] * 2
return ret;
但这似乎已经够难看的了。有任何想法吗?
是的,它是一个单身人士!我只会用这个一次。
让我说清楚:问题出在以下代码中:
return {
a: functionreturn(),
b: this.a * s
};
this.a 似乎在那里不存在。