如何在同一命名空间内从函数 B 调用函数 A?

2024-05-11

假设我有命名空间,

var Namespace = {
    A : function() {
        alert('Hello!');
    },
    B : function() {
        // Call A() from here, do other stuff
    }
}

在这个命名空间中,我想让A成为B的辅助函数。也就是说,A()永远不会在命名空间之外被调用。它只会被命名空间内的函数调用。

解决命名空间内本地/辅助函数问题的最佳方法是什么?我认为有两种可能性:

// Method #1    
var Namespace = {
    A: function() {
        alert('Method #1');   
    },

    B : function() {
        Namespace.A();
    }
}

Namespace.B();

// Method #2
function Namespace2() {
    var A = function() {
        alert('Method #2');
    };

    this.B = function() {
        A();        
    }
}

var ns2 = new Namespace2();
ns2.B();

在第一种方法中,在命名空间内的每个函数中(重复)键入 Namespace.A() 是丑陋且尴尬的。这让我更喜欢方法#2。但我很好奇这里的最佳做法是什么。


我建议将“命名空间”放置在函数作用域内。一切未明确公开的内容自然都是私有的:

var Namespace = (function() {
    var self = {};

    // Private
    var A = function() {
        ...
    };

    // Public
    self.B = function() {
        A();
    }

    return self;
}());

Namespace.B(); // Works
Namespace.A(); // Doesn't work
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在同一命名空间内从函数 B 调用函数 A? 的相关文章