首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JavaScript中声明命名空间?

问如何在JavaScript中声明命名空间?
EN

Stack Overflow用户
提问于 2009-05-19 08:11:02
回答 27查看 620.8K关注 0票数 1.1K

如何在JavaScript中创建名称空间,使我的对象和函数不会被其他同名对象和函数覆盖?我使用了以下方法:

代码语言:javascript
复制
if (Foo == null || typeof(Foo) != "object") { var Foo = new Object();}

有没有一种更优雅或简洁的方法来做到这一点?

EN

回答 27

Stack Overflow用户

回答已采纳

发布于 2009-05-19 08:22:29

我喜欢这个:

代码语言:javascript
复制
var yourNamespace = {

    foo: function() {
    },

    bar: function() {
    }
};

...

yourNamespace.foo();
票数 812
EN

Stack Overflow用户

发布于 2011-05-10 08:28:07

我使用企业jQuery站点上的方法

下面是他们的示例,展示了如何声明私有和公共属性和函数。一切都是作为一个自动执行的匿名函数来完成的。

代码语言:javascript
复制
(function( skillet, $, undefined ) {
    //Private Property
    var isHot = true;

    //Public Property
    skillet.ingredient = "Bacon Strips";

    //Public Method
    skillet.fry = function() {
        var oliveOil;

        addItem( "\t\n Butter \n\t" );
        addItem( oliveOil );
        console.log( "Frying " + skillet.ingredient );
    };

    //Private Method
    function addItem( item ) {
        if ( item !== undefined ) {
            console.log( "Adding " + $.trim(item) );
        }
    }
}( window.skillet = window.skillet || {}, jQuery ));

因此,如果您想访问其中一个公共成员,只需使用skillet.fry()或skillet.ingredients即可。

真正酷的是,您现在可以使用完全相同的语法扩展名称空间。

代码语言:javascript
复制
//Adding new Functionality to the skillet
(function( skillet, $, undefined ) {
    //Private Property
    var amountOfGrease = "1 Cup";

    //Public Method
    skillet.toString = function() {
        console.log( skillet.quantity + " " +
                     skillet.ingredient + " & " +
                     amountOfGrease + " of Grease" );
        console.log( isHot ? "Hot" : "Cold" );
    };
}( window.skillet = window.skillet || {}, jQuery ));

第三个undefined参数

第三,undefined参数是值undefined变量的来源。我不确定它现在是否仍然适用,但是当使用旧的浏览器/ JavaScript标准(ecmascript 5,javascript < 1.8.5 ~ firefox 4)时,全局范围变量undefined是可写的,因此任何人都可以重写它的值。第三个参数(当不传递值时)创建一个名为undefined的变量,其作用域为命名空间/函数。因为在创建名称空间时没有传递值,所以它默认为值undefined。

票数 1.1K
EN

Stack Overflow用户

发布于 2009-05-19 08:39:28

另一种方法,我认为它比对象文字形式的限制性要小一些,就是这样:

代码语言:javascript
复制
var ns = new function() {

    var internalFunction = function() {

    };

    this.publicFunction = function() {

    };
};

上面的内容非常类似于模块模式和不管你喜不喜欢,它允许您将所有函数公开为公共函数,同时避免对象文本的僵化结构。

票数 357
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/881515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档