一,私有屬性和方法
私有方法:私有方法本身是可以訪問類內部的所有屬性(即私有屬性和公有屬性),但是私有方法是不可以在類的外部被調用。
1 <script> 2 /* 3 * 私有方法:私有方法本身是可以訪問類內部的所有屬性(即私有屬性和公有屬性),但是私有方法是不可以在類的外部被調用。 4 */ 5 //JavaScript對象私有屬性,私有方法示例 6 function JSClass() { 7 //私有變量只有在函數或者對象作用域范圍內能訪問 8 var privateAttribute = "私有屬性"; 9 10 function privateMethod_A() { 11 console.log("私有方法A," + privateAttribute); 12 }; 13 14 var privateMethod_B = function () { 15 console.log("私有方法B," + privateAttribute); 16 }; 17 18 //私有方法可以在函數作用域范圍內使用。 19 privateMethod_A(); 20 privateMethod_B(); 21 22 /* 23 私有屬性和方法還有個特點:都不能用this訪問。 24 下面幾種是不行的: 25 this.privateAttribute; 26 this.privateMethod_A(); 27 this.privateMethod_B(); 28 */ 29 }; 30 31 /*new一個實例*/ 32 var instance = new JSClass(); 33 console.dir(instance); //instance實例訪問不到私有屬性及私有方法 34 </script>
說明:類的構造函數里定義的function,即為私有方法;而在構造函數里用var聲明的變量,也相當於是私有變量。(不過類比於c#這類強類型語言中的私有成員概念還是有區別的,比如無法在非構造函數以外的其它方法中調用) 。
私有方法
對象的私有方法和屬性,外部是不可以訪問的,在方法的內部不是能this調用對象的公有方法、公有屬性、特權方法的。
二,公有屬性和方法
公有方法:
1.公有方法是可以在類的外部被調用的,
2.但是它不可以訪問類的私有屬性。
3.公有方法必須在類的內部或者外部通過類的prototype屬性添加。
1 <script> 2 /* 3 * 公有方法: 4 * 1.公有方法是可以在類的外部被調用的; 5 * 2.但是它不可以訪問類的私有屬性; 6 * 3.公有方法必須在類的內部或者外部通過類的prototype屬性添加。 7 */ 8 //JavaScript對象公有屬性,公有方法示例 9 function JSClass() { 10 //公有變量在函數內或者實例都能訪問 11 this.publicAttribute = "公有屬性"; 12 13 this.publicMethod_A = function () { 14 console.log("公有方法A," + this.publicAttribute); 15 }; 16 17 //公有方法可以在類的內部添加 18 JSClass.prototype.publicMethod_B = function () { 19 console.log("公有方法B," + this.publicAttribute); 20 }; 21 22 //公有方法可以在函數作用域范圍內使用,也可以在函索作用域范圍外使用,可以被實例調用和繼承 23 this.publicMethod_A(); 24 this.publicMethod_B(); 25 26 /* 27 公有屬性和方法有個特點:在內部訪問都必須用this訪問 28 下面幾種是不行的: 29 publicAttribute; 30 publicMethod_A(); 31 publicMethod_B(); 32 */ 33 }; 34 35 //公有方法也可以在類的外部通過類的prototype屬性添加 36 JSClass.prototype.publicMethod_C = function () { 37 console.log("公有方法C," + this.publicAttribute); 38 }; 39 40 /*new一個實例*/ 41 var instance = new JSClass(); 42 console.log("實例調用公有屬性:" + instance.publicAttribute); 43 console.log("實例調用公有方法:" + instance.publicMethod_A()); 44 console.log("實例調用公有方法:" + instance.publicMethod_B()); 45 console.dir(instance); //instance實例可以訪問公有屬性及方法 46 47 //但是,通過實例添加公有屬性是不行的 48 //instance.prototype.publicMethod_D = function () { 49 // console.log("公有方法D," + this.publicAttribute); 50 //}; 51 52 </script>
公有方法的調用規則
調用公有方法,我們必需先實例化對象
公有方法中通過不this調用公有屬性和特權方法,不能使用this調用靜態方法和屬性,必需裁通過對象本身調用,即對象名。公有方法也不能調用私有方法。
三,特權方法
特權方法:
1.特權方法是可以在類的外部被調用的,
2.但是它可以訪問類的私有屬性,並且也是可以訪問類的公有屬性,可以勉強的認為它是一種特殊的公有方法。
3.但是它與上面的公有方法的聲明與定義方式不同。特權方法必須在類的內部聲明定義。
1 <script> 2 /* 3 * 特權方法: 4 * 1.特權方法是可以在類的外部被調用的; 5 * 2.但是它可以訪問類的私有屬性,並且也是可以訪問類的公有屬性,可以勉強的認為它是一種特殊的公有方法; 6 * 3.但是它與上面的公有方法的聲明與定義方式不同。特權方法必須在類的內部聲明定義。 7 */ 8 //JavaScript對象特權方法示例 9 function JSClass() { 10 //私有變量只有在函數或者對象作用域范圍內能訪問 11 var privateAttribute = "私有屬性"; 12 //私有方法 13 function privateMethod() { 14 console.log("私有方法"); 15 } 16 17 //通過使用this關鍵字定義一個特權方法 18 this.privilegeMethod = function () { 19 //在特權方法中可以訪問私有屬性和私有方法 20 console.log("特權方法," + privateAttribute + "," + privateMethod()); 21 }; 22 }; 23 /*new一個實例*/ 24 var instance = new JSClass(); 25 console.log("實例調用特權方法:" + instance.privilegeMethod()); 26 console.dir(instance); //instance實例可以訪問公有屬性及方法 27 28 /* 29 * 特權方法瀏覽器兼容支持性很差,避免使用! 30 */ 31 </script>
特權方法的調用規則
特權方法通過this調用公有方法、公有屬性,通過對象本身調用靜態方法和屬性,在方法體內直接調用私有屬性和私有方法。
公有方法:就是所有通過該類實例化出來的對象,共同都擁有或者說都可以使用的方法。一般把共用的方法,都放在“原型對象“當中,如果放在構造函數中,會重復創建共同的方法。
私有方法:不能在外部調用。
特權方法:利用的閉包原理,即通過作用域鏈,讓內部函數能夠訪問外部函數的變量對象(即該類的私有變量、私有方法)。
四,靜態屬性和方法
靜態屬性和方法:
無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法。
1 <script> 2 /* 3 * 靜態屬性和方法: 4 * 無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法。 5 */ 6 //JavaScript對象靜態屬性和方法示例 7 function JSClass() { }; 8 9 JSClass.staticAttribute = "靜態屬性"; 10 JSClass.staticMethod = function () { 11 return "靜態方法," + JSClass.staticAttribute; 12 }; 13 14 //無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法。 15 console.log(JSClass.staticAttribute); 16 console.log(JSClass.staticMethod()); 17 18 /*new一個實例*/ 19 var instance = new JSClass(); 20 //instance.staticAttribute; //錯誤! 21 //instance.staticMethod(); //錯誤! 22 console.dir(instance); //instance實例不可以訪問靜態屬性及方法 23 </script>
靜態方法的調用規則
使用靜態方法時,無需實例化對象,便可以調用,對象實例不能調用對象的靜態方法,只能調用實例自身的靜態屬性和方法。
五,靜態類
靜態類:
無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法,
只包含靜態屬性和靜態方法的類叫靜態類,不能被實例化。
1 <script> 2 /* 3 * 靜態類: 4 * 無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法, 5 * 只包含靜態屬性和靜態方法的類叫靜態類,不能被實例化。 6 */ 7 //JavaScript對象靜態類示例 8 var jsStaticClass = { 9 staticAttribute_A: "靜態屬性A", 10 staticMethod_A: function () { 11 //靜態方法內部可以訪問靜態屬性 12 return "靜態方法A," + this.staticAttribute_A + "," + jsStaticClass.staticAttribute_A; 13 } 14 }; 15 16 //靜態屬性和方法也可以在外部定義和訪問 17 jsStaticClass.staticAttribute_B = "靜態屬性B"; 18 jsStaticClass.staticMethod_B = function () { 19 //靜態方法內部可以訪問靜態屬性 20 return "靜態方法B," + this.staticAttribute_A + "," + jsStaticClass.staticAttribute_B; 21 }; 22 23 24 //無需實例化(即無需用new操作符實化對象)就可以調用的方法就叫靜態方法。 25 console.log(jsStaticClass.staticAttribute_A); 26 console.log(jsStaticClass.staticAttribute_B); 27 console.log(jsStaticClass.staticMethod_A()); 28 console.log(jsStaticClass.staticMethod_B()); 29 30 //var instance = new jsStaticClass(); //靜態類不能被實例化! 31 </script>