从没有使用jQuery访问定义的对象文字

时间:2012-11-02 03:44:17

标签: javascript jquery

我已经采用了一个定义了几个对象文字的项目 - 主要用于构造代码。顺便说一句,不是全职的前端开发人员。问题是它们中的一些是使用jQuery onready事件定义的,而另一些是在外部。至少可以说这似乎有问题。这会被认为是糟糕的设计吗?我是假设的。我已经包含了一段显示一些问题的代码,特别是obj2中的from_inside函数:

<script>
$(document).ready(function(){
  alert('here i am' + obj2.handlers2.background2);  // can access the obj2 value as expected
  alert('make this up: ' + obj2.handlers2.tell_me2());
  var obj={};
  obj.handlers={
    background: 'blue',
    foreground: 'green'
  }
});

var obj2={};
obj2.handlers2={
  background2: 'here i am jt',
  foreground2: 'there you are',
  tell_me2: function(){
    return "these are things";
  }
  ,
  from_inside: function(){
    alert('color from inside jQuery: ' + obj.handlers.background); // problem here! could I get a reference to obj here?
  }
};

obj2.handlers2.from_inside();

</script>

鉴于我们目前如何拥有它,什么是更好的解决方法?看起来我可以在上面将jQuery对象的引用传递给obj2,但也许可能只是简单地将jQuery之外的所有对象都准备就绪,即使在可能的情况下也是如此。

事先提出任何建议

编辑#1

$(document).ready(function(){
  $(document).on('click','#pairing-comment-submit', function(){
    arc.event_handler.submit_pairing_comment.call(this);
  });
  ... about 50 more of these
});

arc={};
arc.event_handler={
  submit_pairing_comment: function(){
     var id=$(this).data('the-id');
     ....
  },
  ....
}

1 个答案:

答案 0 :(得分:2)

您可以将变量赋值移到ready函数之外。这是一个快速重构:

var obj={};
obj.handlers={
  background: 'blue',
  foreground: 'green'
};

var obj2={};
obj2.handlers2={
  background2: 'here i am jt',
  foreground2: 'there you are',
  tell_me2: function(){
    return "these are things";
  },
  from_inside: function(){
    alert('color from inside jQuery: ' + obj.handlers.background); // problem here! could I get a reference to obj here?
  }
};

$(document).ready(function(){
  alert('here i am' + obj2.handlers2.background2);  // can access the obj2 value as expected
  alert('make this up: ' + obj2.handlers2.tell_me2());
  obj2.handlers2.from_inside();
});

工作示例:http://jsfiddle.net/JxS7v/

您面临的问题是由于范围可变。一般来说,变量的范围是它们所在的函数。看一下这篇文章:http://javascriptplayground.com/blog/2012/04/javascript-variable-scope-this