javascript面向对象
一、什么是面向对象
什么是对象:简单通俗的可以把它比喻为一个收音机,我们只需要用它提供的按钮(功能),而不需要知道它的实现原理。这就是对象。
面向对象是一种思想,也可以从生活中去发现。我们只需要关注它提供的功能,而不关注内部细节。它也是一种通用的思想。
二、面向对象(oop)的特点
- 封装:只提供外部使用功能,不需要考虑内部实现。
- 继承:子类可以继承父类的所有属性,方法。
- 多态:子类可以继承多个父类的属性和方法,并且可以有自己的特殊属性和方法。
最关键:抽象,抓住核心问题。
面向对象是解决一类问题,在考虑需求时,应该抓住核心问题,如:员工管理,只需要考虑员工的姓名,职位,薪资等,不用考虑与他无关的问题。
三、对象的组成
属性(相当于变量)this.name='abc';
方法(相当于函数)this.show=function(){alert( this.name )};
方法内this的指向问题:this的函数属于谁,this就是谁
四、工厂方式创建对象
1 function animal(name, age){ 2 //1.原料 3 var obj=new Object(); 4 5 //2. 加工 6 obj.name=name; 7 obj.age=age; 8 9 obj.showName=function(){ 10 alert(this.name); 11 }; 12 obj.showAge=function(){ 13 alert(this.age); 14 }; 15 16 //3.出厂 17 return obj; 18 }
缺点:var a1=animal('大象', 5); var a2=animal('小猩猩', 1); (a1.showName==a2.showName) false
1.每个对象都有自己的属性和方法=》资源浪费 2.没有new
五、原型(prototype)
原型相当于css中的class,给一类对象添加方法。
比如:给系统的String对象添加方法
1 String.prototype.trim=function(){ 2 return this.replace(/^\s+|\s+$/g, ''); 3 }; 4 5 var str=' fsdfsf fsf fsd fsdfsf '; 6 str.trim();
只要给String对象的原型添加了trim方法,str1,str2....strn都可以调用trim方法。而且重要的一点(str1.trim==str2.trim) true,方法都是共用,不浪费资源。
这样我们就可以把工厂方式改变一下:
1 function Animal(name, age){ 2 this.name=name; 3 this.age=age; 4 } 5 6 Animal.prototype.showName=function(){ 7 alert(this.name); 8 }; 9 10 Animal.prototype.showAge=function(){ 11 alert(this.age); 12 }; 13 14 var a1=new Animal('大象', 5); 15 var a2=new Animal('金刚', 100); 16 17 alert(a1.showName==a2.showName); true