如何在15分钟内掌握javascript对象编程面向对象编程

 爹娘老了,扶墙而出,已踏不出任何声音……
  阿强抬头望望天上闪烁的星星,嘴里已发不出任何的声音,坐在轮椅上,看着落地窗外,慢慢走出医院大门的父母,不由的想起了一些往事,晶莹的泪珠悄悄滑下…
  (一)
  那一年夏天,阿强的爸爸工作努力,得了2000元奖金。那时的2000元是一笔巨款,全家高兴了好几天,阿强的爸爸还专门请全家去饭店美美的搓了一顿,然后家里人一致都认为应该买个大彩电,让黑白电视“见鬼去吧”,买回来了,问题来了--放哪里呢?阿强认为放在客厅,大家要看出来看就好,不看也不影响别人,而阿强的爸妈则是想放在自己的卧室,阿强坚持认为爸妈不想让他看,拗不过他,只好放在客厅了,而放在爸妈卧室的理由在10年后的一条短信才让他明白--“其实当时想把电视放我们屋里,是想让你来我们屋里看,这样能多陪陪我们…”
  后来阿强的爸爸被公司调到外地当经理,好久好久才回来一趟,那时的阿强17岁了,但他从来也不帮妈妈做家务,他每天回家都能看见妈妈忙碌的身影,半夜起来上厕所还看见妈妈在洗衣服,他只是淡淡的说了一声“早些睡吧,妈。”妈妈的头半抬着,突然停在半空,然后继续洗衣服去了。他不解,撇撇嘴,睡了。过了几天,有狐朋狗友找阿强出去玩,妈妈看着阿强在门口穿鞋,蓦地,她幽幽地说道:“你…你能不能带我去?”阿强的脑袋一滞,继续穿鞋,在妈妈以为没机会的时候,一只大手伸了过来,“走吧,我们要去ktv唱歌。”路上阿强忍不住问:“为什么我那晚对你说‘早些睡吧’,你不理我呢?”
  “我以前,和你一样,你姥姥每天都忙完工作忙家务,我也从不帮忙,我也对她说过同样的话,她说‘这句话不如你帮我洗完再说’,我才恍然醒悟,你对我说的时候,我想到了当年,呵呵,所以没有回答你。”
  “妈,对不起。”
  (二)
  “你爸不在家,不想做饭,猫在陪我吃饼干。”妈这条短信阿强一直存着。阿强不是爱哭的孩子,但是当他上大学时看到这条短信的时候,他抱着双腿哭了好久。
  妈妈以前不会发短信,阿强也没那个耐心,本来几句话的东西,却嫌她手脚太笨,便没耐心教下去了。晚饭后,妈和爸在房间里看电视,阿强在练听力,那时候还用复读机,恍惚间感觉有东西干扰,手机进条短信,只有5个字,妈妈问:“儿,你在干嘛?”这句简单的问候,让阿强愧疚了好长时间,一直到耐心教会妈妈发短信后心里才释怀。
  (三)
  小时候爸爸总喜欢休息下叫阿强和他一起去买菜,遇到卖水果什么的阿强就直接要,他也喜欢买给阿强吃,他总是把小手指留给阿强牵着。大学毕业工作了,一次回家他让阿强跟他去买菜,阿强走在他后面看到他小手指还翘着,一如阿强小时候牵着他的样子,阿强笑着哭了,小跑了两步抓住爸爸的手,爸爸一愣,没回头笑着说:“习惯了。”
  “爸…”
  爸爸一回头,看见阿强的泪痕,拍了拍他的肩膀,拉着他往前走…那背影,如此厚重…
  (四)
  做生意赔了,颓废的回到家里,妈妈不停安慰阿强,“没事,赔了就赔了,咱们从头再来嘛!”他让爸爸帮他买了台笔记本电脑,上了无线网卡,还给了他几千元放松心情,几天过去了,心情也放开了,带妈妈去逛商城,走了一上午,也没买到什么,突然妈妈想喝绿茶,来到柜台前,拿起了绿茶又放下,嘴里喃喃的说:“怎么这么贵啊…”
  阿强借口去厕所洗了洗自己发红的眼睛,发酸的鼻子,又急忙跑回去,买下那瓶绿茶,放到妈妈手里,“妈,我能赚回来。”
  “…好,有志气就好…”妈妈颤抖着拧开瓶盖,喝了一小口,开心的说:“没喝过这瓶瓶里放的绿茶,还挺好喝的。”又看看他手里的矿泉水,“不过没有矿泉水好喝,咱喝不惯,回家让你爸给你泡点山里采的绿茶,那味道才好咧!”说着便把绿茶塞到阿强怀里,抢走了矿泉水,不容阿强再说话就拉着阿强去服装区,“买身衣服吧,将来可是大老板啊!”妈妈的眼睛都笑成一条缝了,大庭广众之下,阿强抱住妈妈,深深地吸了一口气…“妈,我给你跪一个”,阿强就跪下去了,老妈一把就把阿强搀起来,生气地说:“傻孩子,快起来!现在又不是解放前,被人看到会笑话的。”可她眼角的泪花是躲不过阿强的眼睛的。
  (五)
  爸爸一次重病,在床上躺了大半个月都没醒,后来在一个下午突然醒了。醒来时他嘴一直在动,妈妈把耳朵凑近了对他说:“你慢点说,我听着呢。”爸很虚弱地说:“儿子今天回国了,你去把饭做了吧……他爱吃家里的饭。”
  一下飞机,妈妈就来了电话,“回来了?快回家吃饭吧,我做了你爱吃的红烧带鱼、青菜沙拉、豌豆牛肉、老醋蛰头……要不就凉了。”
  “好嘞,等着我啊,妈。”
  一进家门洗洗手就开始吃自己爱吃的菜,半小时后,阿强打了个饱嗝,懒散的对妈妈说:“妈,我回屋睡会儿,飞机上累。”
  妈妈轻轻的说:“去吧,休息会儿,别累着。”
  然后拿着饭盒出去了,阿强也没注意,倒头就睡。午夜,阿强睡醒了,看见客厅的灯还亮着,揉着惺忪的眼睛,走了过去,看见妈妈在吃我吃剩下的菜,鼻子一酸,“妈,怎么才吃啊?”
  “我刚给你爸爸送了饭,他住院了。”
  “哦…嗯?住院了?什么时候的事?”
  “5天前。”阿强这才想起来,回家好久,都没问下爸爸去哪里了?干什么去了?右手扇了自己一耳光,急急地问道:“在哪个医院?病重不重?哦,对,妈,我在国外赚了不少钱,先花我的吧。”
  “XX医院XX病房,不是太重,什么你的我的,我们老两口还有点,自己攒好自己的钱,别弄丢了,将来娶媳妇,养孩子都用钱啊!”
  “那我先去医院了…”阿强匆忙穿戴衣服。
  “不用了,你爸睡了,明天去吧,飞机上没床,睡不舒服,去睡会儿吧,你姑姑陪着呢。”
  淡淡地“哦”了一句,阿强颓然的走进房间,一夜无眠…
  (六)
  又过了几年,阿强家也富裕了,但他保持着简朴的美德,有一次花了2000元买了一件衣服,去出席一个舞会,回来之后给妈妈打电话:“妈,我花了2000买了件衣服,我觉得以后我有孩子,我肯定舍不得这么给他花钱的。”
  “傻孩子啊,等你当了家长,你就知道了,你就什么都舍得了!父母的爱,是天下最无私的!你知道吗,前年看你穿棉鞋不暖和,见你在外面冻脚的样子,我的心都是疼的……”
  “我--懂了…”
  阿强中年了,自己做了父亲也体会到了做爹娘的苦,阿强觉得终于能回报父母。
  可是阿强病了,癌症,医生断定他活不过一个月,每天的花销上10万元。阿强抬头望望天上闪烁的星星,嘴里已发不出任何的声音,坐在轮椅上,看着落地窗外,慢慢走出医院大门的满头白发相互搀扶的父母,闭上了双眼,手里掉下一张纸,字写的很歪:
  给爹娘
  对不起,我走了。爹、娘我不是不爱你们了,可是我活着的时候什么也没做成,我是不是很没用?我有好多好多话想说,可是说不出来了,所以我才支开你们的,我让护士妹妹帮我写。娘,多喝喝绿茶其实挺好,咱家也比较富了,就别嫌它贵了。爹,你要记得买菜的时候带上我女儿,让她牵你的小手指。对了,我其实3天前就断药了,那些药吃了也浪费,不如把药钱留给你们,在我床下夹着呢,我老婆女儿靠我公司的钱足够了,你们出去旅旅游,买点衣服吧,为了我穷了一辈子了,咱也奢侈一把。还有,娘,爹不在家的时候不想做饭也别委屈自己,去饭店也总比吃饼干强,我会想你们的。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您所在的位置: &
Javascript面向对象编程(二)继承
Javascript面向对象编程(二)继承
阮一峰的博客
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程语言,因为它的语法中没有class。本文主要介绍Javascript中的继承,一起来看。
上一次的文章,主要介绍了Javascript如何&封装&数据和方法,从原型对象生成实例。今天要介绍的是,多个原型对象之间如何&继承&。
比如,现在有一个&动物&对象,
function&Animal() &{ &this.species&=&&动物&; &}&
还有一个&猫&对象,
function&Cat(name,color) &{ &this.name&=& &this.color&=& &}&
怎样才能使&猫&继承&动物&呢?
1. 原型对象绑定
最简单的方法,大概就是使用call或apply方法,将父对象绑定在子对象上,也就是在子对象函数中加一行:
function&Cat(name,color) &{ &Animal.apply(this,&arguments); &this.name&=& &this.color&=& &}& &var&cat1&=&new&Cat(&大毛&,&黄色&); &alert(cat1.species);&&
2. prototype模式
更常见的做法,则是使用prototype属性。
如果&猫&的prototype对象,指向一个Animal的实例,那么所有&猫&的实例,就能继承Animal了。
Cat.prototype&=&new&Animal(); &Cat.prototype.constructor&=&C &var&cat1&=&new&Cat(&大毛&,&黄色&); &alert(cat1.species);&&
代码的第一行,我们将Cat的prototype对象指向一个Animal的实例。
Cat.prototype&=&new&Animal();&
它相当于完全删除了prototype 对象原先的值,然后赋予一个新值。但是,第二行又是什么意思呢?
Cat.prototype.constructor&=&C&
原来,任何一个prototype对象都有一个constructor属性,指向它的构造函数。也就是说,Cat.prototype 这个对象的constructor属性,是指向Cat的。
我们在前一步已经删除了这个prototype对象原来的值,所以新的prototype对象没有constructor属性,所以我们必须手动加上去,否则后面的&继承链&会出问题。这就是第二行的意思。
总之,这是很重要的一点,编程中务必要遵守。下文都遵循这一点,即如果替换了prototype对象,
o.prototype&=&{};&
那么,下一步必然是为新的prototype对象加上constructor属性,并将这个属性指回原来的构造函数。
o.prototype.constructor&=&o;&
3. 直接继承prototype
由于Animal对象中,不变的属性都可以直接写入Animal.prototype。所以,我们也可以让Cat()跳过 Animal(),直接继承Animal.prototype。
现在,我们先将Animal对象改写:
function&Animal(){&} &Animal.prototype.species&=&&动物&;&
然后,将Cat的prototype对象,然后指向Animal的prototype对象,这样就完成了继承。
Cat.prototype&=&Animal. &Cat.prototype.constructor&=&C &var&cat1&=&new&Cat(&大毛&,&黄色&); &alert(cat1.species);&&
与前一种方法相比,这样做的优点是效率比较高(不用执行和建立Animal的实例了),比较省内存。缺点是 Cat.prototype和Animal.prototype现在指向了同一个对象,那么任何对Cat.prototype的修改,都会反映到Animal.prototype。
所以,上面这一段代码其实是有问题的。请看第二行
Cat.prototype.constructor&=&C&
这一句实际上把Animal.prototype对象的constructor属性也改掉了!
alert(Animal.prototype.constructor);&&
4. 利用空对象作为中介
由于&直接继承prototype&存在上述的缺点,所以可以利用一个空对象作为中介。
var&F&=&function(){}; &F.prototype&=&Animal. &Cat.prototype&=&new&F(); &Cat.prototype.constructor&=&C&
F是空对象,所以几乎不占内存。这时,修改Cat的prototype对象,就不会影响到Animal的prototype对象。
alert(Animal.prototype.constructor);&&
5. prototype模式的封装函数
我们将上面的方法,封装成一个函数,便于使用。
function&extend(Child,&Parent)& &{ &var&F&=&function(){}; &F.prototype&=&Parent. &Child.prototype&=&new&F(); &Child.prototype.constructor&=&C &Child.uber&=&Parent. &}&
使用的时候,方法如下
extend(Cat,Animal); &var&cat1&=&new&Cat(&大毛&,&黄色&); &alert(cat1.species);&&
这个extend函数,就是YUI库如何实现继承的方法。
另外,说明一点。函数体最后一行
Child.uber&=&Parent.&
意思是为子对象设一个uber属性,这个属性直接指向父对象的prototype属性。这等于是在子对象上打开一条通道,可以直接调用父对象的方法。这一行放在这里,只是为了实现继承的完备性,纯属备用性质。
6. 拷贝继承
上面是采用prototype对象,实现继承。我们也可以换一种思路,纯粹采用&拷贝&方法实现继承。简单说,如果把父对象的所有属性和方法,拷贝进子对象,不也能够实现继承吗?
首先,还是把Animal的所有不变属性,都放到它的prototype对象上。
function&Animal(){} &Animal.prototype.species&=&&动物&;&
然后,再写一个函数,实现属性拷贝的目的。
function&extend2(Child,&Parent)&{& &var&p&=&Parent. &var&c&=&Child. &for&(var&i&in&p)&{& &c[i]&=&p[i]; &} &c.uber&=&p; &}&&
这个函数的作用,就是将父对象的prototype对象中的属性,一一拷贝给Child对象的prototype对象。
使用的时候,这样写:
extend2(Cat,&Animal); &var&cat1&=&new&Cat(&大毛&,&黄色&); &alert(cat1.species);&&
原文地址:/blog/2010/05/object-oriented_javascript_inheritance.html
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
又是一周匆匆而过。上周五、周六两天,2013年51CTO云计算架构师
本次的专刊为大家提供了Oracle最新推出的Java SE 8详细的开发教程,从解读到探究Java 8最新
互联网一大真理便是,有痛点的地方就有机会。现在最想
Eclipse 是一个开源的、可扩展的集成开发环境。平台本
这个架构是从我近期在做的一个项目中剥离出来的,这个
本书是在第1版的基础上全面更新、改版而成的,仍然是目前图书市场中唯一一本全面介绍硬件服务器的IT图书。本书针对近两年来所出
51CTO旗下网站如何在15分钟内掌握JavaScript面向对象编程 内容详尽,但请以实际操作为准,欢迎..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
如何在15分钟内掌握JavaScript面向对象编程
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 面向对象编程的思想 的文章

 

随机推荐