一、首先不能只是单纯知道它的几个属性而已,它顶端关于function、object的那些乱七八糟的关系也要好好复习一遍。
来几篇好文背一背:
有几个重要结论,好好背一下:
结论1:Object.prototype只是一个普通对象,它是js原型链的最顶端。
结论2:在js中如果A对象是由B函数构造的,那么A.__proto__ === B.prototype。
结论3:内置的Object是其实也是一个函数对象,它是由Function创建的。
结论6:内置的Function也是一个函数对象,它是通过自己来创建自己的。
结论4:js中每一个对象或函数都有__proto__属性,但是只有函数对象才有prototype属性。
结论5:Function.prototype是个特例,它是函数对象,但是没有prototype属性。其他所有函数都有prototype属性。
结论7:函数也是对象,因为Function.prototype__proto__指向Object.prototype。
思路:
1、首先,函数有prototype属性指向原型。函数创建的实例有一个__proto__的属性指向原型。原型有一个constructor属性指向函数。
2、有几个特殊的点需要注意一下:
2.1、原型的顶端是Object.prototype。
2.2、javascript中对象是由Object创建的,函数是由Function创建的。
所以
function Person(){ }
var obj = {};
alert(obj.__proto__ === Object.prototype);//true
alert(Person.__proto__ === Function.prototype);//true
对象或函数都有__proto__属性,但是只有函数对象才有prototype属性(有一个例外:Function.prototype是个特例:Function.prototype.prototype === undefined; //true)。
Function.prototype.__proto__=== Object.prototype;//true
2.3、内置的Function是一个函数对象,它是通过自己来创建自己的。内置的Object也是一个函数对象,它是由Function创建的。
(typeof Function.__proto__) === function;//true
Function.__proto__=== Function.prototype;//true
//Function这个函数对象,由其自身通过Function函数构造的。
Object.__proto__ === Function.prototype;