001 原型与原型链
CENSWIN 8/9/2021 Javascript
# 原型
这是一个函数
function Human () {}1
Human()函数 默认绑定一个带有constructor属性的对象,这就是原型对象,通过Human.prototype可以访问到这个对象
console.log(Human.prototype); // {constructor: ƒ}1原型对象的constructor属性则指回Human()函数
console.log(Human === Human.prototype.constructor); // true1我们通过 new 生成一个对象实例,这个对象实例的
__proto__属性指向其函数的原型即Human.prototype
console.log(man.__proto__ === Human.prototype); // true // getPrototypeOf 方法用于获取对象原型 console.log(Object.getPrototypeOf(man) === Human.prototype) // true1
2
3
这是构造函数、原型、和实例之间的基本关系
# 原型的原型
既然原型对象也是一个对象,那我们同样可以使用相应构造函数创建他,即:
let obj = new Object()
1
我们补充关系图
# 原型链
那 Object.prototype 的原型又是谁呢?
# null
console.log(Object.prototype.__proto__ === null) // true
1
null 表示“没有对象”,即该处不应该有值。
图中由红色线组成的链式结构即为原型链
现在我们知道了,[[Prototype]] 机制就是存在于对象中的一个内部链接,它会引用其他对象。
通常来说,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就会继续在[[Prototype]] 关联的对象上进行查找。同理,如果在后者中也没有找到需要的引用就会继续查找它的[[Prototype]] ,以此类推。这一系列对象的链接被称为“原型链”。