了解原型链,首先要了解构造函数、实例、原型对象之间的关系
构造函数:用new来调用,就是为了创建一个自定义类
实例:是类在实例化之后一个一个具体的对象
原型:被用于复制现有实例来生成新实例的函数
原型链:
当访问一个(实例)对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的_ proto _ 隐式原型上查找,即它的构造函数的prototype,如果还没找到就会在构造函数的prototype的_ proto _ 中查找,这样一层一层向上查找就会形成一个链式结构,称为原型链
所有的对象会一层层往上找原型,最终点是 Object,而 Object 的上一层原型就是 null 了。
prototype
只有函数才有,(构造)函数的原型对象
_ proto _
所有对象都有,总是指向对应(构造)函数的原型对象prototype
constructor
_ proto _下的constructor指向构造函数自己
补充说明
ES 中的构造函数可以用来创建特定类型的对象,用来在创建对象时初始化对象。它的特点是,一般为大写字母开头,使用 new操作符号来实例化对象,比如:
function Person() {}
var person = new Person();
person.name = "Lisa";
console.log(person.name); // Lisa
其中Person 就是构造函数,person 就是对象。
总结
先有Object.prototype(原型链顶端),然后Function.prototype继承Object.prototype而产生,最后Function 和 Object 和其它构造函数继承Function.prototype而产生。