JavaScriptモード読書ノート4
2448 ワード
第五章オブジェクト作成モード
名前空間モード
汎用名前空間関数
これはとてもシンプルなモデルですが、同時に多くの長所があります.スピードが速いです.
JavaScriptの中のすべての対象のメンバーは公共です.
クローズドバックを使用してプライベートメンバーを実現することができます.
Privileged Methodは、上記の例では、getName()はプライベート属性にアクセスする特殊な権限を持つ特権的な方法である.
名前空間モード
汎用名前空間関数
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()はプライベート属性にアクセスする特殊な権限を持つ特権的な方法である.