Fork me on GitHub

Javascript如何实现继承?

前言 

我这篇文章会误人子弟,我把继承跟构造函数实例化搞混了,汗!要想搞清楚JS的继承机制,看下大牛写的文章:http://www.cnblogs.com/dolphinX/p/3307903.html

 

很早以前向大牛要了一份坦克游戏的源代码,自己懒一直都没有去看,这几天突然心血来潮,竟然耐着性子一行一行的看代码,一个源文件一个源文件的看,我被大师优秀的设计所折服,看着过程中发现一个奇怪的问题,有几个方法所有对象都有,但是又没有看到在哪定义了,所以我决定仔细的看这个游戏用到的框架Microsoft Ajax Framework( 可能大牛是搞C#开发的:) ),看到后面发现是通过原型(prototype)继承的,自认为对JS的原型模式非常了解:),看了这个游戏的代码之后,发现自己理解的还不够深,最起码JS所有对象之间的关系没有搞清楚>_<。啥是原型模式?怎么实现的呢?JS所有对象间到底是啥关系呢?

 

JS的设计理念

1 一切皆对象!

2 对象间通过原型来实现继承!

 

原型是啥?

它是函数对象的属性,所有函数对象都有原型(prototype)属性,prototype是一个对象,通过构造函数创建对象时,新的对象会继承构造函数对象的原型(prototype)。

 

JS如何实现继承呢?

通过原型模式实现继承,即构造函数的prototype属性

 

JS对象间的关系

 所有函数对象都会继承Function对象,Function对象是所有函数对象的祖先

所有构造函数的原型通过Object构造函数创建,然后再填充其它方法与属性,Object对象是非函数对象的祖先

 

我的疑问

思索了一下JS对象间的关系之后,我产生了一个问题:Function对象是不是所有对象的祖先啊?

 

后记

1 JS对象继承方式很诡异,不跟其他面向对象的语言一样

2 JS对象间的关系理解的更深了,是我阅读大牛源码的一个收获,以后多多看开源项目的代码

 

 

posted @ 2013-12-08 11:28  huan&ping  阅读(4856)  评论(5编辑  收藏  举报