js中的构造函数和原型

什么是构造函数、原型

js中每个对象(object)都对应着一个构造函数(constructor)和原型(prototype),对象的实例可以通过原型链(prototype chain)使用该对象原型提供的方法。

构造函数中有什么

构造函数中有对象可以实现的方法,譬如Array对象中的isArray()、Of()等等,它们可以直接被对象调用,即Array.isArray(arr),但是不可以被实例直接调用,除了这个,构造函数中还有一个指向原型的prototype指针,这个指针声明了该对象对应的原型,同时为产生原型链提供了依据。

原型中有什么

原型中有实例可以直接调用的方法和指向构造函数的指针,这两个指针使每一个原型和构造函数都形成了既定的关系。原型中的方法可由实例直接调用,例如:arr.forEach()、arr.sort()等等

在内存中的简单结构

左堆区右栈区
js中的构造函数和原型
如图,实例中的__proto__和对象中的constructor的prototype指针指向同一个地址
因此,在js中 obj.proto === Object.prototype 返回值为true

个人对于原型和构造函数用途的理解

这样的设计可以让使用者封装一些实现特定功能的函数,对于构造函数,它可以让我们快速的创建、管理实例。对于原型,原型当中的this一般指向调用它的实例,因此,把这些算法、函数封装在一个原形当中可以快速便捷的让所有该对象的实例使用该方法完成指定的功能,不用再特地为每一个实例编写函数,同时,原型链可以让实例同时继承多个原型的方法,这让设计和实现过程大大简化,避免了繁复的操作。