我如何在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?