Javascript 关联数组/对象可以';不能在函数中读取
在javascript文件的开头,我有:Javascript 关联数组/对象可以';不能在函数中读取,javascript,scope,global-variables,Javascript,Scope,Global Variables,在javascript文件的开头,我有: var lbp = {}; lbp.defaults = { minLength: 40 }; 我可以通过以下方式成功地在事后发出警报: alert(lbp.defaults.minLength); 但一旦我把它放进一个函数中,当我发出警报时,我就会得到“未定义”。什么给了我,我如何避免这种情况?是否绝对有必要将此变量传递到每个函数中,例如,执行以下操作: function(lbp) { alert(lbp.defaults.minLen
var lbp = {};
lbp.defaults = {
minLength: 40
};
我可以通过以下方式成功地在事后发出警报:
alert(lbp.defaults.minLength);
但一旦我把它放进一个函数中,当我发出警报时,我就会得到“未定义”。什么给了我,我如何避免这种情况?是否绝对有必要将此变量传递到每个函数中,例如,执行以下操作:
function(lbp) { alert(lbp.defaults.minLength); }
我会想,首先定义它,它将达到全球范围,而不需要传递
提前感谢您的启发:)
====================================
编辑:
问题似乎是我的初始化函数本身是在lbp中定义的。是否有任何方法可以使用这个函数var,并且仍然在其中使用lbp变量
lbp.initialize = function() {
alert(lbp.defaults.minLength);
};
完整的代码如下所示:
<script type="text/javascript">
var lbp = {
defaults: {
minLength: 40
}
};
lbp.initialize = function() {
alert(lbp.defaults.minLength);
};
window.onload = lbp.initialize;
</script>
var lbp={
默认值:{
最小长度:40
}
};
lbp.initialize=函数(){
警报(lbp.defaults.minLength);
};
window.onload=lbp.initialize;
这在Firefox的javascript控制台上对我来说很有效:
javascript:var lbp={}; lbp.defaults={minLength: 40};function xx() { alert(lbp);alert(lbp.defaults);alert(lbp.defaults.minLength); }; xx();
给出输出[object object],[object object],40
因此,一些相关的代码似乎有一些问题,但没有显示出来?这在Firefox的javascript控制台上对我很有效:
javascript:var lbp={}; lbp.defaults={minLength: 40};function xx() { alert(lbp);alert(lbp.defaults);alert(lbp.defaults.minLength); }; xx();
给出输出[object object],[object object],40
因此,某些关联的代码似乎有一些问题,但没有显示出来?您是否确实将
lbp
作为参数传递?否则,同名参数将隐藏全局变量。您是否实际将lbp
作为参数传递?否则,同名参数将隐藏全局变量。使用此
var lbp = {
defaults: {
minLength: 40
}
};
lbp.initialize = function() {
alert(this.defaults.minLength);
};
window.onload = function() { lbp.initialize(); };
如果调用initialize
作为lbp
的一种方法,则此
将指向lbp
。将函数分配给事件处理程序(如window.onload
)时,实际上是将该函数体复制到定义事件处理程序的对象。所以
window.onload = lbp.initialize
与
window.onload = function() {
alert(this.defaults.minLength);
};
现在,这个
指向的是窗口
,这显然不是我们想要的。通过在函数中包装对lbp.initialize()
的调用,我们可以在该函数中保留该的上下文,并且可以确保它始终指向lbp
。查看更完整的解释。使用此
var lbp = {
defaults: {
minLength: 40
}
};
lbp.initialize = function() {
alert(this.defaults.minLength);
};
window.onload = function() { lbp.initialize(); };
如果调用initialize
作为lbp
的一种方法,则此
将指向lbp
。将函数分配给事件处理程序(如window.onload
)时,实际上是将该函数体复制到定义事件处理程序的对象。所以
window.onload = lbp.initialize
与
window.onload = function() {
alert(this.defaults.minLength);
};
现在,这个
指向的是窗口
,这显然不是我们想要的。通过在函数中包装对lbp.initialize()
的调用,我们可以在该函数中保留该的上下文,并且可以确保它始终指向lbp
。查看更完整的解释。在您试图在函数中使用lbp的原始代码中。您正在将lbp作为参数传入。这将使用相同名称的局部(到函数)变量从全局范围中隐藏lbp(除非在再次调用传递lbp的函数时)
通过在第一个函数中将lbp作为参数传递,它在函数内部不会被视为全局对象,而是局部参数。在原始代码中,您试图在函数中使用lbp。您正在将lbp作为参数传入。这将使用相同名称的局部(到函数)变量从全局范围中隐藏lbp(除非在再次调用传递lbp的函数时)
通过在第一个函数中将lbp作为参数传递,它在函数内部不会被视为全局对象,而是局部参数。如何调用该函数?是否将对象作为参数传递?我在上面添加了完整的脚本代码,我还将添加,将lbp.initialize更改为仅在两个实例中进行初始化解决了问题。这是一个简单的解决方案。我想知道是否还有另一个-但我猜没有。如何调用该函数?是否将对象作为参数传递?我在上面添加了完整的脚本代码,我还将添加,在两个实例中将lbp.initialize更改为仅初始化解决了问题。这是一个简单的解决方案。我想知道是否还有另一个——但我猜没有。好的观点是gnudiff。我在我的问题中添加了一个编辑,因为你已经帮助我进一步定义了这个问题。我在我的问题中添加了一个编辑,因为你帮助我进一步定义了这个问题。仍然没有定义。谢谢,真的吗?如果添加:**window.onload=lbp.initialize;**在你的代码底部,你没有得到一个错误?哇!按您所说的功能添加它很有效。你能给我解释一下背后的逻辑吗?那时你还没有发布完整的代码。我编辑了我的答案以反映这一点。试一试;)还没有定义。谢谢,真的吗?如果添加:**window.onload=lbp.initialize;**在你的代码底部,你没有得到一个错误?哇!按您所说的功能添加它很有效。你能给我解释一下背后的逻辑吗?那时你还没有发布完整的代码。我编辑了我的答案以反映这一点。试一试;)我没有传递函数()的任何内容。你可以在我上面的帖子中看到我的完整代码。如果我要添加函数(lbp),您建议我如何引用它?“this”不起作用…我不会用function()传入任何内容。你可以在我上面的帖子中看到我的完整代码。如果我要添加函数(lbp),您建议我如何引用它?“这个”不起作用。。。