数据类型
- 原始类型(值存于栈)
- string
- number
- boolean
- bigint
- null
- undefined
- symbol
- 对象(值存于堆,指向值的引用存于栈)
prototype
- 函数特有的属性
- 一个函数的
prototype上所有的属性和方法都可以让其所构建的所有实例通过原型链访问
[[Prototype]]
-
等同于 JavaScript 非标准但许多浏览器实现了的
__proto__ -
可通过
Object.getPrototypeOf和Object.setPrototypeOf访问 -
每个实例对象都有一个私有属性
[[Prototype]]指向它的构造函数的原型对象prototype,而该原型对象也有自己的原型对象[[Prototype]],层层向上直到一个对象的原型对象为null,而null是没有原型的,所以原型链的终点就是null。function A(){} const oA = new A(); # 原型链 oA.__proto__ === A.prototype; A.prototype.__proto__ === Object.prototype; Object.prototype.__proto__ === null;
Function
- 每个函数都是由
Function构造的实例对象 Function的[[Prototype]]和prototype都指向一个匿名函数,而该匿名函数的[[Prototype]]则指向Object.prototype。Function的constructor则指向自身
constructor
-
每个实例对象都有一个私有属性
constructor指向它的构造函数 -
而构造函数本身也是由
Function构造的实例对象,故构造函数的constructor则指向Functionfunction A(){} const oA = new A(); oA.constructor === A; A === A.prototype.constructor; A.constructor = Function; Function === Function.constructor; Function.constructor === Function.prototype.constructor;
常用方法
- prototypeObj.isPrototypeOf(object):
- 由
Object.prototype.isPrototypeOf继承而来 - 判断
prototypeObj是否在object的原型链上
- 由
- object instanceof constructor:判断
constructor.prototype是否在object的原型链上 - Object.create
- obj.hasOwnProperty(prop):
- 由
Object.prototype.hasOwnProperty继承而来 - 判断
prop是否为obj的自身属性,不包含原型链上的。
- 由