js的面向对象的三大特征



封装性
所谓封装,就是把我们抽象出的属性和对属性的操作写到类的定义中,

称为封装. 
js 中实现封装主要有两种封装( 公开,私有) 
class Person(name,sal)

{  this.name=name; //公开 

var sal=sal;//私有   this.showInfo=function()

{ //公开  window.alert(this.name+” ”+sal);

showInfo2(){ //把函数私有化.

window.alert(“你好”+this.name+” ”+sal)
} } 

通过构造函数添加成员方法和通过原型法添加成员方法的区别
1. 通过原型法分配的函数是所有对象共享的.
2. 通过原型法分配的属性是独立.(如果你不修改属性,他们是共享)
3. 建议,如果我们希望所有的对象使用同一一个函数,最好使用原型法添加函

数,这样比较节省内存

function Dog(){
 this.shout=function(){ } }

//原型法
Dog.prototype.shout=function ()

{    window.alert("小狗尖叫"+this.name);   }   

//通过原型也可以给每个对象,分配属性  

Dog.prototype.color="red";   

var dog1=new Dog("aa");  

var dog2=new Dog("bb");     

if(dog1.shout==dog2.shout)

{    window.alert("dog1.shout==dog2.shout");   }  

dog1.color="黑色";  

window.alert(dog1.color+" "+dog2.color); 


4. 请大家看一个题: 
function Person(){       }   

// 创建对象  

var p1=new Person();  

// p1.say(); [错误]

// 这时用原型法分配  

Person.prototype.say=function()

{    window.alert("ok");   }   

p1.say(); 
结论是 类.prototype.函数=function (){}; 称为后置绑定.



js面相对象的继承
看一段代码->问题是什么? 
①对象冒充 
代码如下:


 

②通过call 或者apply来实现 

 

js的继承小结
(1) js对象可以通过对象冒充,实现多重继承

(2) Object 类是所有js类的基类


多态的特性
① js的函数的重载文件 
js默认不支持重载,我们可以通过,判断参数的个数来实现重载


 
 

② 覆盖 
当子类有一个方法和父类一样,则我们称子类的方法覆盖了父类的方法 。

//父类
function Stu()

{      this.show=function(){    window.alert("stu show");   }

  }

//子类 

function MidStu()

{     

this.stu=Stu;   this.stu();  

//一定要放在类定义的后面  

this.show=function()

{    window.alert("midstu show");   }

  }

var midstu=new MidStu();  

midstu.show(); 

☞ 要实现覆盖,需要把子类的方法,防止类定义的后面


 多态的基本概念

① 所谓多态,我们可以简单的理解就是一个引用类型 (对象/变量) 在不同情况下的多种状态

② js 本身是无态,js天生就支持多态. 
    js的多态的一个案例:

   

js的多态的经典案例


总结:多态有利于代码的维护和扩展,这里我们可以考虑,

如果食物 加入  桃子,动物加入 猴子,可以看到,Master的feed函数不需要的变化。 

你可能感兴趣的:(js的面向对象的三大特征)