0

我采用了一个定义了多个对象文字的项目——主要用于构建代码。顺便说一句,不是全职前端开发人员。问题是它们中的一些是用 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');
     ....
  },
  ....
}
4

1 回答 1

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

于 2012-11-02T03:48:35.953 回答