前言
我这篇文章会误人子弟,我把继承跟构造函数实例化搞混了,汗!要想搞清楚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对象间的关系理解的更深了,是我阅读大牛源码的一个收获,以后多多看开源项目的代码