分享
 
 
 

[讨论]函数的封装解释

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

dingding让我来讲一下什么叫函数封装??

我自己也不能完全讲清楚的说...只能做到自我理解^^

其实封装,字面解释就是封起来装好,事实上也确实是这样子的比如一个函数

function myFunc(a,b){

return a+b;

}很明显myFunc的用处就是返回两数的和

那么

myVar = myFunc(1,2); myVar就等于3. 这之中就做到了封装,因为当你要得到两个数相加的时候你只要调用myFunc();然后把你要相加的两个数传进去就可以了,具体myFunc是怎么加的,你根本不用知道.这样子就达到了封装的作用.当然加法谁都会做,所以这么做显然有点哗众取宠^^" 那如果让你计算由两个电阻并联组成的电路中,总电阻是多少呢??

ok,如果你的电学学的很棒,想都不想就知道了,但是你的电学和我一样,不怎么样,或者说糟透了的话.我们还是用一下别人封装好的函数就行了

function Resistance(r1,r2){

if((r1+r2)==0) trace("错误:分母不能为''''0''''");

else return r1*r2/(r1+r2);

} R=Resistance(5,10); 这样子,你不用去管它什么要命的电学公式,只要调用一下Resistance();并把你知道的两个电阻值传进去就搞定了^^ 怎么样,封装是不是很好理解,形象一点就是: 你把一组数据传到一个黑箱中,在经过这个黑箱后得到的另一组数据,之中黑箱就是封装了的函数 而此中黑箱的入口,就是函数的参数.... 你只要知道入口是什么就行了,你管黑箱怎么造的,结构怎么样呢

OK,说的差不多了,不明白在问吧,我的能力一次性也就只能表达这么点内容了:D

ding8285

封装的大致用途就是,把一个函数写好后,以后到哪里都可以用这个函数,

只要知道接口就可以了,不需要知道函数是怎么做的 比如 你会不会用gotoAndPlay(); 呢?会吧,他就是一个MM公司封装好了的函数

但是你不知道具体怎么执行的吧 接下来,讲接口的概念,还是用gotoAndPlay();,你会用告诉我怎么用?

呵呵你会告诉我gotoAndPlay(1)

那么里面的1就是这个函数的参数 当然除了这个参数,你还知道gotoAndPlay()有别的参数么?

你会回答我 有比如gotoAndPlay("XX帧标签") gotoAndPlay("XX场景")

就是因为这几种参数,就是这个函数对外的接口 我们只知道 gotoAndPlay(10) 时间轴就跳10帧播放

而gotoAndPlay()这个函数里面到底是怎么运作的,我们不需要知道,

只要知道它提供我们的接口是什么,然后通过这个接口我们能干什么就ok了 比如,你自己写了个函数

function moveToRight(mc){

mc._x++;

} moveToRight就是封装函数,mc就是对外接口

这个函数你随便拿到哪里,只要给它传递一个mc参数就可以了

moveToRight 是函数名 mc是参数 下面我们举个例子来说说封装函数和没封装的函数的区别与好处所在

function reSet(){

_root.mc._alpha = 50;

}

reSet()

//或者mc.onEnterFrame = moveToRight;是不是就达到把MC的ALPHA的效果了?? 这个方法好不好呢?

也许你会说,没什么不好呀 首先申明了一个函数 然后又调用这个函数。思路很清晰呀!

但是难道真的觉得它很好么??没有一点不好的地方么??

呵呵,其实它一点不好 为什么?

试想一下,如果你的mc的名字突然要换了,换成 myMC,你还是要达到你要的效果,你该怎么做

是不是要找到这个函数,把mc换成myMC

改2个地方 第一:帧上 第二:MC的命名

然后你又突然发现,要让场景中的其他5.6个mc也达到用样的效果,又该怎么做 ?

是不是在函数里面反复的加上_root.mc1._alpah=50;_root.mc2._aplha=50;......

是不是很笨的方法? 如果你聪明,ok,你会想到在函数里面建立一个循环

for(var i = 0 ;i<5;i++){...} 呵呵 但当你不止有5个,有6了呢,是不是就又要改了?

到头来,你场景中稍微有点改动,你就要潜千辛万苦的去找reSet函数,并反复修改

也就是说,这个函数再别的文件里面,一点用处都没有,还要针对其他源文件的情况

而改变,到头来只是为了要场景中的一些mc的透明度到50,就要不断的修改函数内容

如果你承认,这么做很傻,那么你就要学会封装函数 其实最简单的办法,你为函数建立一个参数(注意:这里mc是参数了,而不是原来场景中实例的引用 )

function reSet(mc){

mc._alpha = 50;

}那么你要哪里的mc透明为50,只要把这个mc的名字传入参数就可以了 比如,你的场景里面有6个mc,名字为mc1~mc6;那么

reSet(mc1);

reSet(mc2);

reSet(mc3);

reSet(mc4);

reSet(mc5);

reSet(mc6);

就算你有600个也不用怕,用一个循环就搞定了

for(var i = 1; i<=600;i++){

reSet(this["mc"+i]);

}

这样,这个函数就活了,哪怕你这个项目结束了,下个项目中,仍然要使用到

把某些mc的透明设置为50,只要再用这个函数就ok了

这个函数就是所谓的封装好了的函数,参数mc,就是你对外的接口

不管你场景中的mc怎么变化,从头到尾,你都不需要去改变函数里面的内容 ------------封装的概念,和封装的用处,以及封装的好处,大家明白了吧

呵呵 也许你还没明白吧 那我们再来举个抽象点的例子 比如,你要搬家了,那么建立一个搬家函数

function 搬家(){

沙发.位置 = 靠墙;

床.位置 = 角落;

桌子.位置 = 靠窗;

}

当你如果多了一个椅子的时候,你是不是要找到搬家的函数,然后添加一下 椅子.位置 = 靠门???(位置随便说的)

再当你,如果觉得桌子的位置不对的时候,你是不是又要去修改桌子.位置 = 哪里??

这么做是不是太麻烦了,如果你是一个装修大队,每户人家的摆设不可能一样的,

你是不是每次都要修改你的搬家函数呢 所以变成当初的笨办法了

如果你装修了50户人家,那么当其中一家人家出问题了,要你重新设计,你还要去找,对应它的搬家函数来修改

但是...

function 搬家(家具,地点){

家具.位置 = 地点;

}

这么做是不是就解决了问题

搬家(桌子,靠窗);

搬家(床,角落);

搬家(椅子,靠门);

....

其实封装的意义,就是把不改变的东西隐藏,把改变的东西暴露

封装的好处就是可以让,程序耐用,多用,维护便利等

上面那个搬家函数,不管你搬50户人家,100户人家,用那个一个函数,就统统搞定了,是不是要方便很多

如果你是装潢公司的设计师,这么一个方案一定是大手好评的...之前那个嘛,不说也知道,一定被炒鱿鱼,呵呵

你设计出来了方案,当然需要有人照着执行啦

搬家(桌子,靠窗);

搬家(床,角落);

搬家(椅子,靠门);

....

好了说了这里 最后说句

"封装是一个概念,是一个良好的程序思想,是一个良性的编程方法"

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有