JS原型与原型链图解

277 阅读1分钟

前言:希望可以通过这篇文章,能够给你得到帮助。(感谢一键三连),前端小白不断升级打怪中...

JavaScript 中除了基础类型外的数据类型,都是对象(引用类型)。但是由于其没有 类(class,ES6 引入了 class,但其只是语法糖)的概念,如何将所有对象联系起来就成立一个问题,于是就有了原型和原型链的概念。

每个实例对象( object )都有一个私有属性(称之为 proto )指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象( proto ) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。 在这里插入图片描述

JavaScript 中,万物皆对象!但对象也是有区别的。分为普通对象和函数对象,Object 、Function 是 JS 自带的函数对象。 在这里插入图片描述 例子:

['2', '2'].__proto__ === Array.prototype
true
Array.__proto__ === Function.prototype
true
Array.prototype.__proto__ === Object.prototype
true
Function.prototype.__proto__ === Object.prototype
true
Array.__proto__ === Object.__proto__
true
var a = {};
a.__proto__ === Object.prototype
true
Object.__proto__ === Function.prototype
true
a.__proto__ === Function.prototype
false
function Person(){}
var ins = new Person(); // 实例
Person.prototype // 原型对象
Person.prototype.constructor = Person;
ins.__proto__ = Person.prototype;
ins.constructor = Person;
Person.prototype.__proto__ = Object.prototype;
Object.prototype.constructor = Object;