一、原型
首先我们要知道,使用function定义的对象是一个特殊的对象,使用new操作符定义的对象是一个普通的对象;
普通对象只有_proto_属性(_proto_可称为隐式原型),它指向构造该对象的构造函数的原型;而特殊对象有两种属性,_proto_属性和prototype(原型)属性,其中prototype属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象称为原型对象),原型对象也有一个属性,叫construction,这个属性包含一个指针,指回构造函数,而原型对象的_proto_则指向构造改对象的构造函数的原型,也就是Object.prototype(JS中所有的对象都是Object实例,并继承Object.prototype的属性和方法,也就是说Object.prototype是所有对象的爸爸)。
二、原型链
当一个对象在查找一个属性的时候,自身并没有这个属性,那这个对象就会根据_proto_向它的原型进行查找,如果没有找到,就依次向上查找,直到查到Object.prototype._proto_为null,这个查找的过程就叫做原型链。
比如我们要查找f1.tostring()方法,但是f1本身没有,那f1就会根据_proto_找到Foo.prototype,如果还没有找到,就根据Foo.prototype._proto_找到Object.prototype,然后就找到了tostring()方法。

浙公网安备 33010602011771号