如何识别不同的范围

时间:2013-06-13 16:02:51

标签: javascript jquery scope anonymous-function

我正在使用this library向我的jQuery插件添加自定义上下文菜单。但在某些时候我有一个奇怪的问题,我认为这与范围相互作用的方式有关。基本上我有两个对象,它们是相同的,但是以两种非常不同的方式构建,其中一个按预期工作,另一个没有。

我会添加一些我的代码,不幸的是它的大而复杂到足以制作它的jsFiddle,如果有必要,我会尝试制作一个。

$.contextMenu({
  selector : [jQUery selector],
  build : function() {
    // some things to do here...

    var contextMenuItems = {}; // list of all the menu entries
    var actions = [{ label : "1" }, { label : "2" }];

    $.each(actions, function(key, value) {
      var newSubMenu = {}; // sub menu
      // some other things...

      // FIRST OBJECT, DOESN'T WORK
      var subMenu = {
        sep1 : "-",
        remove : {
          callback : function() {
            console.log(action);
          }
        }
      }

      // SECOND OBJECT, WORKS AS EXPECTED
      var subMenu2 = {
        sep1: "-",
      };

      subMenu2["remove"] = {
        callback : function() {
            console.log(action);
          }
      };

      $.extend(contextMenuItems[value.label], { items : $.extend(newSubMenu, subMenu) }); (1)
      $.extend(contextMenuItems[value.label], { items : $.extend(newSubMenu, subMenu2) }); (2)
    });
  }
});

基本上,我为上下文菜单的每个条目添加了相同的子菜单。当我单击子菜单条目"remove"时,我希望它记录父标签。但是如果我添加'subMenu'个对象(第(1)行),它总是记录第一个'动作',如果我添加'subMenu2'对象(第(2)行),则会显示正确的标签。有人可以解释我为什么会这样吗?

0 个答案:

没有答案