我如何在JavaScript中声明一个名称空间?

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

if (Foo == null || typeof(Foo) != "object") { var Foo = new Object();}

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


我喜欢这个:

var yourNamespace = {

    foo: function() {
    },

    bar: function() {
    }
};

...

yourNamespace.foo();

我使用Enterprise jQuery网站上的方法:

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

(function( skillet, $, undefined ) {
    //Private Property
    var isHot = true;

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

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

        addItem( "tn Butter nt" );
        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

真正好的是,你现在可以使用完全相同的语法来扩展命名空间。

//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


另一种做法是,我认为它比对象字面量表的限制性小一点,这是:

var ns = new function() {

    var internalFunction = function() {

    };

    this.publicFunction = function() {

    };
};

上面的内容与模块模式非常相似,无论您是否喜欢它,它都允许您将所有函数公开,而避免对象文本的严格结构。

链接地址: http://www.djcxy.com/p/345.html

上一篇: How do I declare a namespace in JavaScript?

下一篇: Why are functions in JavaScript set to global variables instead of plain functions?