所有内容均不是原创,单纯之前学习时做的笔记。内容结合了非常多的文章视频,已经记不清参考的哪里的了,所以就没有加参考说明了。
原型与原型链
-
对应名称
prototype:原型__proto__:很多人会理解成原型链,其实应该是原型的连接点
-
从属关系
prototype是函数的一个属性,是一个对象{}__proto__是对象Object的一个属性,也是一个对象{}- 对象的
__proto__保存着该对象的构造函数的prototype
-
function Test (){}; console.log (Test.prototype);//{constructor: ƒ} const test = new Test(); console.log(test.__proto__);//{constructor: ƒ} console.log(test.__proto__=== Test.prototype) ;//true // Test.prototype => {__proto__} console.log (Test.prototype.__proto__ === Object.prototype);//true console.log (Object.prototype.__proto__);//null
原型链
-
沿着
__proto__去找原型里的属性,一层一层去继承原型里的属性的这条链条,就叫做原型链。 -
打个比喻:
protetype就是一条链上的节点,里面存放我们的信息,__proto__就是连接两个节点的绳子。 -
原型链的顶层是
Object.prototype,再往上就是null了 -
test = { b: 333 a: 1, __proto__: Test.prototype = { b: 2, __proto__: Object.prototype = { c: 3 __proto__: null } } }
Function与Object的特殊性
Function与Object既是函数也是对象Function.prototype和Object.prototype是两个特殊的对象,他们由引擎来创建。除了以上两个特殊对象,其他对象都是通过构造器new出来的-
// const Test = new Function() console.log(Function.__proto__ === Function.prototype);//true // const obj= f: // const obj= new Object(); console.log(typeof Object);// function console.log(Object.__proto__ === Function.prototype)//true console.log(Object.__proto__ === Function.__proto__)//true
constructor
- 原型的
constructor属性指向构造函数,构造函数又通过prototype属性指回原型。 constructor是实例化对象的构造函数