如何在使用";立即调用的函数表达式;用Javascript?
我一直在用这种方式定义名称空间如何在使用";立即调用的函数表达式;用Javascript?,javascript,javascript-namespaces,Javascript,Javascript Namespaces,我一直在用这种方式定义名称空间 (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" ); ad
(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扩展到一个子名称空间,如skillet.module,并让模块以与skillet相同的方式运行—保护其未定义的成员,并允许私有和公共成员
我尝试了另一种定义名称空间的方法,在skillet内部,do skillet.theObject={blah:function(){};依此类推,但这只会给我一个普通对象,而不是其中的私有和公共成员。只需在函数中添加另一个立即调用的函数表达式,并向其传递赋值参数,以便对其进行初始化
(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);
};
(function (module) {
module.test = function () { // access this by typing skillet.module1.test()
if (isHot !== undefined) console.log(pour('water') + (isHot ? ', cold!' : ', hot!'));
}
function pour(what) {
return 'Pouring ' + what;
}
)(skillet.module1 || (skillet.module1 = {})); // no need for undefined and $ rewriting as already done in parent function
//Private Method
function addItem(item) {
if (item !== undefined) console.log("Adding " + $.trim(item));
}
}(window.skillet || (window.skillet = {}), jQuery));
JavaScript中并没有真正的名称空间:JavaScript中的所有“名称空间”实际上都是对象。我相信他知道这一点,但他只是试图在JavaScript中包含OOP实践,这是正确的=)@Qantas94Heavy是的,这就是我想要的。你能把这个作为一个答案,这样我就可以接受了吗?谢谢,我添加了一个保护,skillet.module=skillet.module |{},就像顶部的名称空间一样。