运行JSON.stringify.
它检测循环引用的对象在控制台中如下所示。
LOG|ES5|Object>>{
"state": true,
"model": "MAppAMDeleter",
"client": {},
"time": {},
"bin": {
"arg_this": {}, // I'm guessing this is the culprit
"foo_id": "610"
},
"server": {
"smalls": {
"name": "The Foos",
"page": "ma",
"h_token": "1FOO",
"remember": "0",
"pane": "",
"privacy": "0",
"h_file": "1FOO",
"picture": "1",
"special": "0"
},
"tweets": {},
}
}
我认为唯一可能导致错误的是我实际分配给对象文字的这一行。
pipe.bin.arg_this = this; // when I assign this, it points to a different object all together.
我试图理解为什么Safari会认为它指向包含结构化数据的对象文字(我上面复制的那个),而Firefox似乎知道它指的是我指定它的初始对象 - 实际上是页面元素。
答案 0 :(得分:1)
试试这个:
....
initDynamic: function (event) {
var pipe;
event.preventDefault();
pipe = $A.definePipe('MAppAMDeleter');
pipe.bin.arg_this = event.target; // edited here.
pipe.bin.arcmark_id = this.id;
$A.machine(pipe);
}, ....
原因是,javascript解析器尝试获取对象时可以覆盖this
。不同的浏览器以(稍微)不同的方式处理JavaScript,因此可以稍微更快地获取被点击的对象,而另一个浏览器可能更慢并且读取this
作为最新的负责人;)
event.target
总是指向被点击的对象,无论如何;)