如何在JavaScript中创建名称空间,使我的对象和函数不会被其他同名对象和函数覆盖?我使用了以下方法:
if (Foo == null || typeof(Foo) != "object") { var Foo = new Object();}有没有一种更优雅或简洁的方法来做到这一点?
发布于 2009-05-19 08:22:29
我喜欢这个:
var yourNamespace = {
foo: function() {
},
bar: function() {
}
};
...
yourNamespace.foo();发布于 2011-05-10 08:28:07
下面是他们的示例,展示了如何声明私有和公共属性和函数。一切都是作为一个自动执行的匿名函数来完成的。
(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即可。
真正酷的是,您现在可以使用完全相同的语法扩展名称空间。
//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。
https://stackoverflow.com/questions/881515
复制相似问题