我的问题基于以下情况。
var test = (function(){
var SlideManager = !function(){
this.Sequencer = {
getSequence : function()...
}
return this;
}()
var LayerManager = !function(){
this.Sequencer = {
getSequence : function()...
}
}()
var module = {};
module.foo = function(){}
return module;
})()
作为解释,测试对象在其范围内有两个辅助对象:SlideManager& LayerManager中。这两个处理实体幻灯片和&&amp ;;层。每个实体在DOM中都有自己的固定位置,该位置应通过Sequencer
辅助对象检索。
请注意,每位经理都应该拥有自己的Sequencer
,我希望在提供的示例中也是如此。
然而,我对js范围的理解似乎存在问题,因为两个管理器都具有相同的Sequencer
(来自图层管理器的那个)。
我应该期待这样的事情,还是我在代码中的其他地方做错了什么。
谢谢!
答案 0 :(得分:2)
阐述斯科特·亨特所说的......
只是自动执行函数(function(){})()不给它们一个新的范围。为此,您需要“新”关键字。
所以:
var SlideManager = function(){
this.Sequencer = {
getSequence : function()...
}
return this;
};
var LayerManager = function(){
this.Sequencer = {
getSequence : function()...
}
};
var slideManagerInstance = new SlideManage();
var layerManagerInstance = new LayerManager();
可能更多你正在寻找...也为什么你“!”在分配之前敲打自动执行的函数...会给你一个真/假布尔值吗?
答案 1 :(得分:-1)
this
不是该函数的本地,因此两者中都是SAME,这就是为什么它们具有相同的Sqeuencer。