【发布时间】:2013-03-17 13:25:51
【问题描述】:
我正在尝试确定一种方法,该方法将为我提供将代码包装在 Namespace/Unit 之类的对象中的最优雅方式。例如 Google Maps API 的 var a = Google.Maps.Foo();,我认为它看起来很干净。
我希望它也附上(如果这是正确的术语)jQueryNo 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 ));
任何人都可以对此进行扩展,指出潜在的问题,或者只是提供一种更好的方法吗?
【问题讨论】:
-
从来没有一种最优雅的方式来做某事,因为优雅是主观的。
-
为您做出最佳决策所需的一切都在这里:stackoverflow.com/questions/881515/…
-
@NinjaNye 啊是的,这就是代码的来源,我正在尝试对其进行扩展。
-
你的图案真的很好。你想扩展什么?
-
在我看来,最好将所有函数定义为私有,然后公开任何必要的函数,
en bloc在最后的一组语句中。例如,function fry() {...}然后是skillet.fry = fry;。这具有双重优势,即允许内部函数调用不需要skillet.前缀,并且公共方法易于观察/调整。
标签: javascript jquery design-patterns module closures