这将是一个新手问题,但是答案可能很简单,我正在努力理解这个概念。任何反馈将不胜感激
这是我的问题的简化版
var x=(function(){
this.load=function(){
alert("this is x load");
};
return this
})();
var y=(function(){
this.load=function(){
alert("this is y load");
};
return this
})();
x.load();
y.load();
执行结果为
x.load和y.load
我的问题
为什么x访问var y.load?我认为bc每个加载函数都包含在它自己的自调用匿名函数中,它只能通过相应的变量访问
另外,为了得到我想要的东西(让.load()在变量的范围内),什么是声明这些对象的最佳方法。(我只需要每个x的1个实例)和y)
我想在这些函数中坚持自我约束的bc,我打算让jquery文档就绪事件处理程序,我想立即设置。
答案 0 :(得分:0)
自调用函数将为您提供一次性范围,允许您创建闭包或仅使用变量而不会污染全局对象。 '这'不受影响。您可能会对构造函数/ new运算符语法感到困惑,它将为此提供一个新值,因此具有您所寻求的行为:
var x = new function () {
this.load = function () {
alert("this is x load");
}
}();
var y = new function () {
this.load = function () {
alert("this is y load");
}
}();
x.load();
y.load();
。 。
(对于记录,使用构造函数的正确方法更像是这个:
function Alerter(alerterName) {
this.name = alerterName;
}
Alerter.prototype.load = function () {
alert('this is ' + this.name + ' load');
};
var x = new Alerter('x');
var y = new Alerter('y');
x.load();
y.load();
)
答案 1 :(得分:-1)
这不是范围,而是上下文,并且您没有x.load
或y.load
。
this
的值取决于您如何调用函数。
如果您致电foo.bar()
,则在bar
内,this
将为foo
。
如果您没有foo
(例如bar()
),则this
的值将成为默认对象。在window
。
由于this
在两种情况下均为window
,因此this.load
是相同的。
可能您想使用局部变量(var load
)或the new
keyword。