简介
JavaScript 原型,原型链 ? 有什么特点?
-
原型是我们创建函数的时候,系统帮我们自动生成的一个对象。 主要作用是解决构造函数内部方法内存资源浪费问题。在开发中我们一般把实例对象一些通用的方法放入原型中,在 vue 里面有时候也会给 vue 的原型添加一些公共类方法来实现所有的组件中可以共享成员。像一些常见的store 都是挂载到 vue 的原型上的。
-
原型链是 js 对象一种查找机制,遵循就近原则。当我们访问一个对象中的成员的时候,会优先访问自己的,如果自己没有就访问原型的,如果原型也没有就会访问原型的原型,直到原型链的终点 null. 如果还没有,此时属性就会获取 undefined,方法就会报错 xxx is not a function。一般原型链主要是用来实现面向对象继承的。
构造函数
构造函数可以通过 prototype 访问原型, 也可以通过 new 进行实例化对象
对象
对象可以通过 constructor 访问构造函数, 也可以通过 __ proto __ 访问原型
原型
原型可以通过 constructor 访问构造函数, 也可以通过 __ proto __ 访问到 Object 的原型 Object.prototype
Object
它可以通过 prototype 访问到 Object的原型 Object.prototype, Object的原型 Object.prototype 可以通过 constructor 访问的Object
Object.prototype
再往上找 找到的是 null
关系简版图
代码解释
由构造函数到原型对象
沿原型链继续查找
// 从原型对象出发查找Object.prototype用__proto__方法
// 也就是说原型对象上有一条链式结构,可以在原型对象的基础上进一步使用__proto__方法查找
// 如下判断:
// 原型对象也可以逆向查找构造函数本身
// 如下判断:
// 沿着原型链一直往下查找 最终会找到一个null
小结:还有一些三者之间的关系以及查找方法这里就不一一列举了,有兴趣有需要的可以深入研究!!!
如下图等: