最近よく使うオブジェクトの定義パターンのメモ。
追記 よく使うオブジェクトの定義パターン2 : JavaScriptへコンストラクタ使う方法を少し改善して記載(2014.04.25)
var hoge = {}; (function () { // プライベート変数 var foo = 'foo'; // 内部関数・ヘルパー function _bar() { // 処理 } // 公開関数(API) function _baz() { // 処理 } hoge.baz = _baz; }());
名前空間を使う。
// namespace var findxfine = {}; findxfine.namespace = function() { var object = this; return function(name) { if (typeof object[name] == "undefined") { object[name] = {}; } return object[name]; }; }(); // オブジェクト作成 (function () { // オブジェクト取得 var hoge = findxfine.namespace('hoge'); // プライベート変数 var foo = 'foo'; // 内部関数・ヘルパー function _bar() { // 処理 } // 公開関数 function _baz() { // 処理 } hoge.baz = _baz; }());
オブジェクトからオブジェクトを作成する関数や名前空間を導入。
// namespace var findxfine = {}; findxfine.namespace = function() { var object = this; return function(name) { if (typeof object[name] == "undefined") { object[name] = {}; } return object[name]; }; }(); // Object.create if (!Object.create) { (function () { function F() {} Object.create = function (object) { F.prototype = object; return new F(); }; }()); } // オブジェクト作成 (function () { var hoge = findxfine.namespace('hoge'); // プライベート変数 var foo = 'foo'; // 内部関数・ヘルパー function _bar() { // 処理 } // 公開関数 function _baz() { // 処理 } hoge.baz = _baz; }()); // オブジェクトの利用 var obj1 = Object.create(findxfine.namespace('hoge')); obj1.baz(); var obj2 = Object.create(findxfine.namespace('hoge')); obj2.baz();
// namespace var findxfine = {}; // constructor findxfine.Hoge = (function() { // コンストラクタ function Cstr(arg) { var foo = arg.toUpperCase(); // プライベートインスタンス変数 this.bar = arg.toLowerCase(); // パブリックインスタンス変数 this.getFoo = function () { return foo; }; } // プライベート静的変数 var BAZ = 'BAZ'; // 公開メソッド // prototypeメソッドgetBazをクロージャーで定義し // fooを静的変数にする Cstr.prototype.getBaz = function() { return BAZ; }; // 公開メソッド Cstr.prototype.getBar = function() { return this.bar; // foorbarにはprototypeメソッドからはアクセスできない。 }; return Cstr; }()); // オブジェクトの利用 var obj1 = new findxfine.Hoge('obj1'); console.log(obj1.getFoo()); // OBJ1 console.log(obj1.getBar()); // obj1 console.log(obj1.getBaz()); // BAZ
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。