概述
JS中原型是为了实现代码重用的一种仿类机制,不过它跟类又完全不同。它通过给对象添加原型关系(即给某个对象添加__proto__属性)实现一个关联。把共有的方法和属性放到这个关联上即实现了JS的继承。简单来说就是一种委托机制。
JS里面的原型关系真的很复杂也很绕,如果只是很枯燥的讲述各种关系,真的很难记住,在这里希望通过代码和思维导图组合的形式,对JS的原型进行一次深度的剖析和理解。
代码分析
首先,我们给出下面的一组关系代码
function Test() {}
var t1 = new Test()
var t2 = {}
var t3 = new Number(1)
t1.__proto__ === Test.prototype
Test.__proto__ === Function.prototype
Test.prototype.__proto__ === Object.prototype
t2.__proto__ === Object.prototype
Number.__proto__ === Function. prototype
Math.__proto__ === Object.prototype
t3.__proto__ === Number.prototype
Number.prototype.__proto__=== Object.prototype
导图理解
下图是根据上述关系绘制的思维导图,方便大家理解。
总结
- 引擎会创建两个对象Object.prototype和Function.prototype
- 用__proto__将Function.prototype和Object.prototype关联
- 非函数对象可以通过__proto__找到Object.prototype
- 函数对象通过__proto__找到Function.prototype
- 函数的 prototype 是一个对象,该对象的__proto__指向Object.prototype
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。