Javascript语言是符合面向对象思想的。一般来说,面向对象思想需要满足以下三个基本要求:

  1. 封装,Javascript的对象可以自由的扩充成员变量和方法,自然是满足该要求的

  2. 继承,Javascript采用了比较少见的原型继承机制,也满足该要求

  3. 多态,Javascript的原型继承机制也可以支持多态

这里的关键问题就是Javascript的原型继承机制到底是个啥玩意?

1.对象的原型

有很大的可能性,Javascript在设计之初根本就没有考虑那么复杂。啥玩意面向对象思想,跟我有半毛钱关系啊。公司就给我两周时间,连设计带编码,我当然是怎么简单怎么来了。如果说一门计算机语言一定要满足唯一的一个最最基本的设计思想,那一定不是面向对象,而应该是更简单的:语言应支持功能的复用。如果一个对象功能不够用了,那就再叫个帮手呗,于是Javascript硬性规定:任何对象都必须有一个原型对象。这下好了,所有的Javascript对象都是自带秘书的,自己搞不定的就交给秘书去搞,秘书再搞不定的,就交给秘书的秘书去搞,这样一路交接过去,直到彻底搞不定了,那就只好报错。这就是Javascript中的原型链检索机制,是不是超简单?

因为对象的原型是Javascript对象的基本构件,那么首要的问题就是如何得到对象的原型对象?大体来说有以下两种方法:

  • obj.__proto__,有点黑客的意思,但是现代几乎所有的浏览器都支持它,关键是最直接

  • Object.getPrototypeOf(obj),尽管是Javascript语言的一个规定,但是写起来实在是有些费劲

网友评论