以前定義的任何類型成員都屬於公有成員的範疇,該類的任何實例都對外公開這些屬性和方法.app
注意在JS中,其實沒有私有的概念~框架
//私有成員 /* * 私有成員即在類的內部實現中能夠共享的成員,不對外公開. * JS中並無特殊的機制來定義私有成員,但能夠用一些技巧來實現這個功能. */ /* * 這個技巧主要是經過變量的做用域性質來實現的,在JS中,一個函數內部定義的變量稱爲局部變量, * 該變量不可以被此函數外的程序所訪問,卻能夠被函數內部定義的嵌套函數所訪問. * 在實現私有成員的過程當中,正是利用了這一性質. * 在前面提到,在類的構造函數中能夠爲類添加成員,經過這種方式定義的類成員,實際上共享了在構造函數內部定義的局部變量, * 這些變量就能夠看做類的私有成員. */ function class1(){ var pp='this is a private property';//私有屬性成員pp function pm(){//私有方法成員pm,顯示pp的值 alert(pp); }; this.Method1=function(){//在公有成員中改變私有屬性的值 pp='pp has been changed'; }; this.Method2=function(){//在公有成員中調用私有方法 pm(); }; }; var obj1= new class1(); obj1.Method1(); obj1.Method2(); alert(obj1.pp);//undefined 訪問不到 alert(obj1.pm);//undefined 訪問不到 //***var __age =10; 通常這樣定義私有變量名,包括私有的方法
//靜態成員 /* * 靜態成員屬於一個類的成員,它能夠經過"類名.靜態成員名"的方式訪問. * 在JS中,能夠給一個函數對象直接添加成員來實現靜態成員,由於函數也是一個對象,因此對象的相關操做,對函數一樣適用. * 在JS中,不能用靜態成員訪問實例成員,也不能用實例成員訪問靜態成員,二者是不相通的. */ function class2(){//構造函數 }; class2.staticProperty='sample';//靜態屬性 class2.staticMethod=function(){//靜態方法 alert(class2.staticProperty); }; class2.staticMethod(); /* * 類class1添加了一個靜態屬性和靜態方法,而且在靜態方法中引用了該類的靜態屬性. * 若是要給每一個函數對象都添加通用的靜態方法,還能夠經過函數對象所對應的類Function來實現 */ //給類Function添加原型方法:showArgsCount! Function.prototype.showArgsCount=function(){//定義靠前 alert(this.length); } function class3(a){ } class3.showArgsCount(); /* * 以上,經過Function的prototype原型對象,能夠給任何函數都加上通用的靜態成員,這在實際開發中能夠起到很大的做用. * */
/*prototype.js框架*/ Function.prototype.bind=function(object){ var _method=this; return function(){ _method.apply(object,arguments); }; }; Function.prototype.bindAsEventListener=function(object){ var _method=this; return function(event){ _method.call(object,event || window.event); }; };