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