JavaScriptで匿名の自己参照関数のクロージャーが非常に優れているという事実は、JavaScriptが不完全な仕様であることを示唆していますか?これの多くを見る:
(function () { /* do cool stuff */ })();
そして、私はすべてが好みの問題だと思いますが、あなたが望むのはプライベートな名前空間だけであるとき、これは手品のように見えませんか?JavaScriptはパッケージと適切なクラスを実装できませんでしたか?
ECMAScriptに基づくActionScript 3と比較してください。
package com.tomauger {
import bar;
class Foo {
public function Foo(){
// etc...
}
public function show(){
// show stuff
}
public function hide(){
// hide stuff
}
// etc...
}
}
JavaScriptで実行するコンボリューションとは対照的です(これは、jQueryプラグイン作成ドキュメントから)。
(function( $ ){
var methods = {
init : function( options ) { // THIS },
show : function( ) { // IS },
hide : function( ) { // GOOD },
update : function( content ) { // !!! }
};
$.fn.tooltip = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
}
};
})( jQuery );
この質問は好みやプログラミングスタイルについて暴言に簡単に退化することができますが、実際には、経験豊富なプログラマーがこれについてどのように感じているか、新しい言語のさまざまな特異性を学習するように、自然に感じているかどうかを聞いて非常に興味があります、実装されていないいくつかの基本的なプログラミング言語コンポーネントの回避策のように?