JavaScript 是一门基于原型的面向对象语言,它是无类(class-free)的。
OOP 是 YUI 的核心代码,代码非常精简:
上面的 7 个方法,加上在 YUI~base 模块里的mix, merge, cached
3 个方法,是 YUI 3 代码组织中的 10 个核心方法。
基础知识点
详细解析代码前,先复习下 JavaScript 的一些基础知识点:
- 在 JavaScript 中,所有对象 o 都拥有一个隐藏的原型对象(在 Firefox 中是 o.__proto__)。该隐藏原型对象拥有一个 constructor 成员,指向该对象的构造函数。当读取对象成员 o.member 时,会顺着原型链往上回溯。因此我们可以得到
o.constructor === o.__proto__.constructor
. 这是最基本的知识点,不多说。 - 在 JavaScript 中,所有函数声明在解析后,都自动拥有一个 prototype 成员。该 prototype 成员拥有一个自动添加的 constructor 成员,指向函数本身。也就是
Fn === Fn.prototype.constructor
. - 函数 Fn 本身也是对象,因此
Fn.constructor === Fn.__proto__.constructor
, 注意Fn.__proto__ !== Fn.prototy