第一个被问到的问题是:你猜Function._proto_ 是什么?
于是通过博客中转过的一篇博文和js高程学习了原型链并画了张总图,一图了解全部知识
注意:图中的箭头代表等于。
其他基础知识复习部分:
A.原型
1.实例的构造函数属性(constructor)指向构造函数。
person1.constructor == Person
2.每个函数对象都有一个prototype
属性,这个属性指向函数的原型对象
Person.prototype.constructor == Person
3.每个对象都有 __proto__ 属性,但只有函数对象才有 prototype 属性
4.原型对象(Person.prototype)是 构造函数(Person)的一个实例。
5.对象 person1 有一个 __proto__
属性,创建它的构造函数是 Person,构造函数的原型对象是 Person.prototype ,所以:person1.__proto__ == Person.prototype
6.所有的构造器都来自于Function.prototype,甚至包括根构造器Object及Function自身
7.Math,JSON是以对象形式存在的,无需new。它们的proto是Object.prototype。
检验以上内容:
person1.__proto__
是什么?Person.__proto__
是什么?Person.prototype.__proto__
是什么?Object.__proto__
是什么?Object.prototype__proto__
是什么?
难点:
-
Object.__proto__ === Function.prototype // true
Object
是函数对象,是通过new Function()
创建的,所以Object.__proto__
指向Function.prototype
。(参照第八小节:「所有函数对象的__proto__
都指向Function.prototype
」) -
Function.__proto__ === Function.prototype // true
Function
也是对象函数,也是通过new Function()
创建,所以Function.__proto__
指向Function.prototype
。
Function.prototype.__proto__ === Object.prototype //true
至此, 原型链学习完毕。