JavaScriptモード読書ノート4

2448 ワード

第五章オブジェクト作成モード
名前空間モード
汎用名前空間関数
var MYAPP=MYAPP || {}

MYAPP.namespace=function(ns_string){
  var parts=ns_string.split("."),
  parent=MYAPP,
  i;
  //            
  if(parts[0]==="MYAPP"){
    parts=parts.slice(1);
  }



  for(i=0;i<parts.length;i+=1){
    //      ,       
    if(typeof parent[parts[i]]==="undefined"){
      parent[parts[i]]={};

   }
   parent=parent[parts[i]];
 }

  return parent;

};

//            
var module2=MYAPP.namespace('MYAPP.modules.module2');
module2===MYAPP.modules.module2 //true;

//      MYAPP
MYAPP.namespace("modules.module51");

//     
MYAPP.namespace("once.upon.a.time.there.was.this.long.nested.property");
依存関係を宣言する
これはとてもシンプルなモデルですが、同時に多くの長所があります.スピードが速いです.
var myFunction=function(){
  //  
  var event=YAHOO.util.Event,
      dom=YAHOO.util.Dom;

      //     DOM  
  
var MYAPP=MYAPP || {}

MYAPP.namespace=function(ns_string){
  var parts=ns_string.split("."),
  parent=MYAPP,
  i;
  //            
  if(parts[0]==="MYAPP"){
    parts=parts.slice(1);
  }



  for(i=0;i<parts.length;i+=1){
    //      ,       
    if(typeof parent[parts[i]]==="undefined"){
      parent[parts[i]]={};

   }
   parent=parent[parts[i]];
 }

  return parent;

};

var modules=MYAPP.namespace("MYAPP.modules");
modules.m1=function(){
  alert('m1');
}
modules.m2=function(){
  alert("m2");
}
function test(){
  var modules=MYAPP.modules;
  modules.m1();
  modules.m2();

}
プライベート属性と方法
JavaScriptの中のすべての対象のメンバーは公共です.
var myobj={
  myprop:1,
  getProp:function(){
    return this.myprop;
  }
}

console.log(myobj.myprop); //myprop       
console.log(myobj.getProp());  //getProp        
function Gadget(){
  this.name="iPod";
  this.stretch=function(){
    return 'iPod';
  };
}
var toy=new Gadget();
console.log(toy.name); //name     
console.log(toy.stretch()); //stretch()    
プライベートメンバー
クローズドバックを使用してプライベートメンバーを実現することができます.
function Gadget(){
  //    
  var name="iPod";

  //    
  this.getName=function(){
    return name;
  };
}
var toy=new Gadget();
console.log(toy.name); //name  undefined  ,     
console.log(toy.getName()); //getName()       iPod
特権的な方法
Privileged Methodは、上記の例では、getName()はプライベート属性にアクセスする特殊な権限を持つ特権的な方法である.