Javascript 面向對象(共有方法,私有方法,特權方法,靜態屬性和方法,靜態類)示例講解


一,私有屬性和方法

私有方法:私有方法本身是可以訪問類內部的所有屬性(即私有屬性和公有屬性),但是私有方法是不可以在類的外部被調用。 

 

 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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM