好的,所以这很复杂,所以请耐心等待,我会尽量保持简单:
我有一个“类”结构,它创建了一个“类似结构”的骨架,以应用于 Javascript 中的 ArrayBuffers。问题是当我试图模仿允许结构包含其他结构的“c”类行为时。
问题是它破坏了调用方法的迭代器(显然是一个闭包问题),我似乎无法弄清楚。
这是一个被破坏的代码示例(希望这是足够的代码来获得答案,如果没有,我会根据需要添加更多,只是试图将无关代码排除在外):
function StructObject(){
this.applyBuf = function(buf, start){
var struct = {};
for (obj in this){
//problem is here:
console.log(obj); //prints "c" on the way in
struct[obj] = this[obj].__createFromBuf();
console.log(obj); //prints "foo" (see the structs below)
}
return struct;
}
}
function struct(strctObj, name){
var structObject = new StructObject();
...
//create the skeleton
for (item in strctObj){
//the specific code that fails me
structObject[item].__createFromBuf = function(buf, pos){
return structs[this.name].applyBuf(buf, pos);
}
...
//store the skeleton for later application
structs[name] = structObject;
}
//Creating structs looks like this:
new struct({ foo: type.INT }, "bar");
new struct({
a: type.INT, //defines size of memory (like c's sizeof)
b: type.LONG,
c: {type: type.STRUCT, name: "bar"},
d: type.SHORT}, "myStruct");
structs.myStruct.applyBuf(new ArrayBuffer(35));
当我遍历类方法 applyBuf 上的第一个结构时,它会在结构骨架中的每个项目上调用 __createFromBuf,如果该项目是另一个结构 __createFromBuf 在另一个“结构骨架”对象上调用 applyBuf 并将该结构的实例返回给调用结构,按预期工作。
JSFIDDLE——这是一个工作示例的链接:)