如何在JavaScript中创建名称空间,以使我的对象和函数不会被其他同名对象和函数覆盖?我使用了以下内容:
if (Foo == null || typeof(Foo) != "object") { var Foo = new Object();}
有没有更优雅或更简洁的方法?
我喜欢这个:
var yourNamespace = { foo: function() { }, bar: function() { } }; ... yourNamespace.foo();
如何声明私有和公共属性和功能。一切都作为一个自执行的匿名函数完成。
(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。
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参数是value变量的来源undefined。我不确定今天是否仍然有用,但是在使用较旧的浏览器/ JavaScript标准(ecmascript 5,javascript <1.8.5〜firefox 4)时,global-scope变量undefined是可写的,因此任何人都可以重写其值。第三个参数(未传递值时)创建一个名为的变量undefined,其作用域为名称空间/函数。因为在创建名称空间时未传递任何值,所以它默认为value undefined。