JS高级学习历程-10
【面向对象】
面向对象的三大特性:封装、继承、多态
封装:在“类”里边有关键字public、protected、private 对成员进行声明,这样每个成员的访问都会受到不同关键字的限制。
继承:在php里边一个类可以继承另外一个类。继承的类实例化出来的对象既可以使用本类的成员,也可以使用父类成员。
多态:多种状态,在java里边方法“重载”体现多态。工厂设计模式也有多态体现。
1 在javascript面向对象里边的“封装”
在js里边封装体现两点:public公开的、private私有的
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>03-面向对象封装性</title> 6 <script type="text/javascript"> 7 //通过构造函数方式创建对象,体现封装 8 //① 在构造函数内部成员通过this,方式声明的就是公开的“public” 9 // 在类的外部可以直接通过 对象.成员 进行调用 10 //在类的内部也可以直接使用 11 //② 给构造函数声明私有属性private(作用域链的作用) 12 function Animal(){ 13 var tail = "不会摇尾巴";//局部变量,其在函数外部不能直接访问 14 function talk(){//局部函数,在当前函数外部也不能直接访问 15 return '今晚咱们在村东头集合'; 16 } 17 this.name = "七匹狼"; 18 this.color = "gray"; 19 this.leg = 4; 20 this.hobby = "吃肉"; 21 this.run = function(){ 22 //在类的内部访问自己的成员变量 23 console.log(this.name+'在草原追逐'+"在跑动过程中尾巴的状态:"+tail); 24 } 25 this.secret = function(){ 26 console.log('我的眼睛晚上会发光,并且我的尾巴:'+tail+"--"+talk()); 27 } 28 } 29 var wolf = new Animal(); 30 //console.log(wolf.tail); //undefined 31 //console.log(tail); //undefined 32 console.log(wolf.color); 33 console.log(wolf.leg); 34 console.log(wolf.hobby); 35 console.log(wolf.hobby); 36 wolf.run(); 37 wolf.secret(); 38 </script> 39 </head> 40 <body> 41 42 </body> 43 </html>
2 静态成员
static声明静态成员。
在php里边是通过 类名::静态成员 进行调用,普通对象也可以调用静态成员。
在javascript里边如果一个成员是通过函数直接调用的,那么这个成员就是静态的。
Math.random()
Math.ceil() Math.floor() Math.round()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>04-自定义静态成员</title> 6 <script type="text/javascript"> 7 //自定义静态成员 8 function Animal(){ 9 this.name = "七匹狼"; 10 this.color = "gray"; 11 } 12 //函数本身是对象,我们可以给对象增加额外成员 13 //这个额外成员就可以理解为“静态成员” 14 Animal.addr = "north"; 15 Animal.eye = function(){ 16 console.log('晚上闪闪发光'); 17 } 18 console.log(Animal.addr); 19 Animal.eye(); 20 </script> 21 </head> 22 <body> 23 24 </body> 25 </html>