JavaScript中的函数范围。不同的对象结果相同

时间:2013-12-26 17:08:56

标签: javascript scope

我的问题基于以下情况。

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(来自图层管理器​​的那个)。

我应该期待这样的事情,还是我在代码中的其他地方做错了什么。

谢谢!

2 个答案:

答案 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)

两个Managers中的

this不是该函数的本地,因此两者中都是SAME,这就是为什么它们具有相同的Sqeuencer。