为什么Safari检测到Firefox没有的循环引用?

时间:2013-02-10 23:17:18

标签: javascript

运行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似乎知道它指的是我指定它的初始对象 - 实际上是页面元素。

1 个答案:

答案 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总是指向被点击的对象,无论如何;)