在JavaScript中创建命名空间/类类型结构的最优雅方式
我试图找到一种方法,它将为我提供在Namespace
/ Unit
中包装代码的最优雅方式。 例如Google Maps API的var a = Google.Maps.Foo();
,我认为看起来很干净。
我希望它包含 jQuery
No Conflict
$
符号(如果这是正确的术语)。
到目前为止我很喜欢:
// Top level container for sub objects var myApp = myApp || {}; // An object to be held in myApp (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 ); return "Fried!"; }; //Private Method function addItem( item ) { if ( item !== undefined ) { console.log( "Adding " + $.trim(item) ); } } }( window.myApp.skillet = window.myApp.skillet || {}, jQuery ));
任何人都可以扩展这一点,指出潜在的问题,或者只提供更好的方法吗?
检查此JavaScript模块模式和此学习JavaScript设计模式
模块示例:
var MyModule = (function($){ var MY_CONSTANT = 123; var _myPrivateVariable = 'TEST MEH'; var _$myPrivateJqueryObject = $('div.content'); var _myPrivateMethod = function(){ alert('I am private!'); }; var myPublicMethod = function(){ console.log('Public much?'); } return { myPublicMethod : myPublicMethod }; })(jQuery); MyModule.myPublicMethod();
类示例:
function Person(name, age){ this.name = name || ''; this.age = age || -1; } Person.prototype.greet= function(){ console.log('Hi! My name is' + this.name + '. Old ' + this.age + ' I am.'); } var person = new Person("John", 12); person.greet();