在javascript文件的最开头,我有:
var lbp = {};
lbp.defaults = {
minLength: 40
};
之后我可以成功提醒它:
alert(lbp.defaults.minLength);
但是当我把它放在一个函数中时,当我发出警报时,我会得到“Undefined”。什么给出了,我该如何避免这种情况?是否绝对有必要将此变量传递给每个函数,例如,执行:
function(lbp) { alert(lbp.defaults.minLength); }
我本以为首先定义它,它会达到全球范围而不是被要求传递?
提前感谢您启发我:)
====================================
编辑: 问题似乎可能是我的初始化函数本身是在lbp中定义的。有没有办法使用这个函数var,还是在里面使用lbp vars?
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>
答案 0 :(得分:3)
你实际上是以lbp
作为参数吗?否则,具有相同名称的参数将隐藏全局变量。
答案 1 :(得分:2)
使用this
。
var lbp = {
defaults: {
minLength: 40
}
};
lbp.initialize = function() {
alert(this.defaults.minLength);
};
window.onload = function() { lbp.initialize(); };
如果您将initialize
称为lbp
方法,this
将指向lbp
。将函数分配给事件处理程序(例如window.onload
)时,实质上是将该函数的主体复制到定义了事件处理程序的对象。所以,
window.onload = lbp.initialize
与
相同window.onload = function() {
alert(this.defaults.minLength);
};
现在,this
指向window
,这显然不是我们想要的。通过在函数中包含对lbp.initialize()
的调用,我们在该函数中保留this
的上下文,并确保它始终指向lbp
。请查看this以获取更完整的说明。
答案 2 :(得分:1)
这适用于我在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。
所以,似乎某些相关代码可能存在一些问题,但未显示?
答案 3 :(得分:0)
在您尝试在函数中使用lbp的原始代码中。你正在传递lbp作为参数。这将使用同名的本地(函数)变量将lbp隐藏在全局作用域中(除非在调用函数时再次传入lbp)。
//this is what you have and will not alert a thing other
//and will probably throw an error
function(lbp) { alert(lbp.defaults.minLength; }
//should just be this with no argument. this will allow
//the function to see lbp in the global scope.
function() { alert(lbp.defaults.minLength; }
通过将lbp作为参数传递给第一个函数,它在函数内部看不到全局对象,而是局部参数。