javascript中的面向对象思想
面向对象
Java编程中万物皆对象,即所有为外界提供属性和方法的整体都可以看做对象,而在面向对象编程中,我们只关注对象提供的属性和方法,而不关注对象本身,所以把代码块封装为一个类对象,不考虑代码块内部结构,只考虑它为我们提供的属性和方法,即为javascript中的面向对象编程
javascript如何做到面向对象oop
学习Java的面向对象思想,我们知道,面向对象的三大特性为继承,封装,多态。并且对象的关键在于暴露出来的属性和方法。从这两个方面可以讨论出javascript如何做到面向对象编程。
javascript的封装,继承,多态
Javascript中的函数就是对于功能的一种封装,函数包括普通函数和构造函数两类,构造函数是对象创建的基础。javascript中函数也是对象的一种。封装即将功能和属性封装为一个函数模块,供外部调用。继承是从已经存在的对象上,继承出新的对象。
多态表示在继承父级对象特性的基础上拥有不同的表现形式。
举例来说:数组也是一个对象,数组中的所有方法都是对象方法,数组中的属性和变量类似,只是属性是属于对象的变量。同样数组中的方法实质也是函数,只是属于对象。this决定这个方法属于哪个对象。
模拟Java构建工厂
function creatFaction(name,sex){
//使用javascript构造函数模拟java对象工厂
this.name=name;
this.sex=sex;
this.showName=function(){
alert(this.name);
}
}
//调用工厂函数构建对象举例:
var p1=new creatFaction('zhangsan','nv');
p1.showName();
javascript面向对象中的原型思想
原型可以类比于css中的class样式。
给一个对象单独加方法相当于css中的行间样式。
使用原型可以为一类对象添加属性和方法。
对象名.prototype.方法名=function()
同样原型相当于Java中的工厂类,工厂并不具有实际功能,只是为了构造对象。原型本身也不提供方法,而是通过原型new出的对象,具有原型中定义的方法。同样在javascript中的构造函数为new出的对象提供属性,所以一定意义上说javascript中构造函数即为工厂类(js特有)
综上所述:在构造函数中添加属性,在原型中添加方法。可以解决工厂函数两个问题。因为属性每个对象都不同,是对象特有(类似行内样式),用构造函数来设置。但是方法对每个对象都一样的操作,所以用原型来添加。(类似class里面样式)
function Faction(name,sex){
//使用构造函数和原型完整模拟对象工厂
this.name=name;
this.sex=sex;
}
Faction.prototype.showName=function(){
//方法showName
};
使用json实现面向对象
在javascript中json既可以存储变量,也可以存储方法,并且json本身也是一个对象。
var p={
name:'zyv',//属性
six:'nv',
show:function(){//方法
alert(this.name);
}}
//调用:
p.show();
缺点:不适应于生成大量类似对象(工厂),一个json生成一个对象。
优势:(命名空间)即json里面的属性可以是另一个json(json嵌套),这样可以把不同的属性和方法按照分支数的形式分别放在json不同分支下,调用时只要多层调用即可(json包json)(同一类的方法包在一个json属性里面)类似于java中的包
var zong={};
zong.caiwu={
show1:function(){},
show2:function(){}
}
zong.huodong={
ha:function(){},
sa:function(){}
}
//调用:
zong.caiwu.show1();