如何简单易懂的理解面向对象?

    xiaoxiao2023-10-29  25

    面向对象的概念

    面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统,交互式界面,应用结构,应用平台,分布式系统,网络管理结构,CAD技术,人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后到产物,是一种高级的编程思想。

    如何理解这段话呢? 首先面向对象是一种编程模式,与之对应的是面向过程。面向过程简单来说,就是根据思路来一步一步实现功能,最终达到最终效果;面向对象,就可以理解为给特定的对象添加功能。

    为了便于理解,我们可以把他和对象类型(obj)和函数同时对比,面向对象最终的结构同时拥有类似函数的功能和对象类型的特点。

    <script type="text/javascript"> //构造函数 function Banner(){ //选择元素 this.imgbox=document.querySelector(".imgbox"); this.img=document.querySelectorAll(".imgbox a"); this.left=document.querySelector(".btn .left"); this.right=document.querySelector(".btn .right"); this.index=0; this.init(); } //完善布局 Banner.prototype.init=function(){ this.imgbox.style.width=this.img.length*this.img[0].offsetWidth+"px"; this.addEvent(); } //添加功能 Banner.prototype.addEvent=function(){ var that=this; this.right.onclick=function(){ that.changeIndex("r"); } this .left.onclick=function(){ that.changeIndex("l") } } Banner.prototype.changeIndex=function(type){ if(type=="r"){ if(this.index==this.img.length-1){ this.imgbox.style.left=0; this.index=1; }else{ this.index++; } }else{ if(this.index==0){ this.imgbox.style.left=-(this.img.length-1)*this.img[0].offsetWidth+"px"; this.index=this.img.length-1-1; }else{ this.index--; } } this.display(); } Banner.prototype.display=function(){ move(this.imgbox,{left:-this.index*this.img[0].offsetWidth}) } new Banner(); function move(ele,data,callback){ clearInterval(ele.timer); ele.timer = setInterval(function(){ var onoff = true; for(var attr in data){ if(attr === "opacity"){ var iNow = getStyle(ele,attr) * 100; }else{ var iNow = parseInt(getStyle(ele,attr)); } var speed = (data[attr] - iNow)/8; speed = speed<0 ? Math.floor(speed) : Math.ceil(speed) if(data[attr] != iNow){ onoff = false; } if(attr === "opacity"){ ele.style[attr] = (iNow + speed)/100; }else{ ele.style[attr] = iNow + speed + "px"; } } if(onoff){ clearInterval(ele.timer); callback && callback(); } },30) } function getStyle(ele,attr){ if(getComputedStyle){ return getComputedStyle(ele,false)[attr]; }else{ return ele.currentStyle[attr] } } </script>

    举例如上是轮播图的js代码: 我们对比函数和对象来说,如果我们要使用一个对象类型,首先要声明一个对象;

    var obj = {name:"张三",sex:"男"}

    那么这一步声明一个对象就相当于例子中的第一步,叫做构造函数,并且在构造的函数中我们会添加需要被操作的数据,这些数据相当于name:“张三”,sex:"男"这些数据。另外注意,构造函数需要用new来执行,且为了方便区分,一般构造函数的函数名首字母需要大写。

    然后我们可以注意到这个:

    Banner.prototype.display=function(){}

    这就相当于我们在构造函数形成的对象中插入了数据,这些数据也是以类似键值对的形式存在的,类似以下,我们在obj中插入了 功能A:“输出个人信息”,其中功能A:就相当于函数名function display() "输出个人信息"就是函数内语句

    var obj = {name:"张三",sex:"男",功能A:"输出个人信息"}

    换一种方式理解,以上的结构可以看作:

    var 轮播图 ={imgbox:"imgbox", img:".imgbox a",function init:" this.imgbox.style.width=this.img.length*this.img[0].offsetWidth+"px"; this.addEvent()", function addEvent:" var that=this; this.right.onclick=function(){ that.changeIndex("r"); } this .left.onclick=function(){ that.changeIndex("l") }" }

    那么为什么说面向对象写出的结构有函数的特点呢? 如果说函数是为了实现相对单一的功能而封装的,那么面向对象就可以理解成是为了实现更复杂的功能而“封装”的“函数”,举例来说,如果把函数比喻成一个空调的各种功能,比如制冷,制热,过滤等,那么面向对象就是把这些功能封装在一个空调里这样的事情。 以上的说明只是为了便于理解,面向对象也是有更多的特性需要斟酌理解的。

    最新回复(0)