$(document)/ready(function(){
if (this == that) {
var myobject = {};
var variable = 55;
function dothisandthat(variable);
alert(JSON.stringify(myobject));
}
})
function dothisandthat(variable) {
//Do something
myobject["first"] = variable + 5;
myobject("second") = variable + 10;
}
如何在我的函数中使用myobject,然后再次调用函数外部的对象?
答案 0 :(得分:2)
如果您只是myobject = {}
或window.myobject = {}
,甚至是$.myobject = {}
,它可以全局使用。将它附加到某个全局对象(如窗口),或者因为您使用的是JQuery $对象,然后您可以在整个过程中使用它。
或者@Pointy说,只需将参数添加到方法中:
function dothisandthat(variable, myObject) {
答案 1 :(得分:0)
嗯,使用面向对象的方法,您通常会告诉对象修改它的内部状态,这会同时解决您的范围问题。
function MyObject() {
this.first = 0;
this.second = 0;
}
MyObject.prototype.doThisAndThat = function (variable) {
this.first = variable + 5;
this.second = variable + 10;
};
$(document).ready(function () {
//...
var myObject = new MyObject();
myObject.doThisAndThat(55);
alert(JSON.stringify(myObject));
//...
});
但是,如果您想使用功能方法(数据和行为单独生活),您必须在myObject
范围内提供doThisAndThat
。有几种方法可以做到这一点:
将对象作为参数传递给函数。这通常是我喜欢的方式,因为它使依赖性显式化。
请注意,纯函数方法不会改变传入函数的对象,但会返回对象的修改副本,因为数据结构通常是不可变的。
< / LI>依靠关闭。在这种情况下,您只需在文档就绪回调中移动doThisAndThat
函数声明。
依靠全局变量或众所周知的对象。我会在大多数时候避免这种解决方案,因为它会使您的依赖项隐藏起来并且您的代码更难以测试。