原型:
每个函数都有prototype属性,该属性指向原型对象。 使用原型对象的好处是所有对象实例共享它所包含的属性和方法。
原型链:
访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会沿着它的_proto_ 属性所指向的那个对象(父对象)里找,直到为null为止,这样一层一层的就构成了原型链。
主要解决了继承的问题。
特点:
-
prototype是构造函数才有的属性
-
proto:是隐式原型,是对象才有的属性,由于函数也属于对象的一种,所以函数也有这个属性
-
constructor是原型对象才有的属性
-
对象.proto === 构造函数.prototype
-
构造函数.prototype.constructor = 构造函数
-
所有构造函数的 proto 属性都指向 Function.prototype -
所有普通对象的 proto 属性都指向 Object.prototype -
Object.prototype.proto === null
-
实例本身没有constructor属性,constructor是原型对象才有的属性,所以它会沿着原型链在它的构造函数的原型对象上找到constuctor这个属性,也就是它的构造函数