001 原型与原型链

8/9/2021 Javascript

# 原型

  1. 这是一个函数

    function Human () {}
    
    1
    foo
  2. Human() 函数 默认绑定一个带有constructor属性的对象,这就是 原型对象,通过Human.prototype 可以访问到这个对象

    foo
    console.log(Human.prototype); // {constructor: ƒ}
    
    1
  3. 原型对象constructor属性则指回 Human() 函数

    foo
    console.log(Human === Human.prototype.constructor); // true
    
    1
  4. 我们通过 new 生成一个对象实例,这个对象实例的__proto__ 属性指向其函数的原型Human.prototype

    foo
    console.log(man.__proto__ === Human.prototype); // true
    // getPrototypeOf 方法用于获取对象原型
    console.log(Object.getPrototypeOf(man) === Human.prototype) // true
    
    1
    2
    3

这是构造函数、原型、和实例之间的基本关系

# 原型的原型

既然原型对象也是一个对象,那我们同样可以使用相应构造函数创建他,即:

let obj = new Object()
1

我们补充关系图

foo

# 原型链

那 Object.prototype 的原型又是谁呢?

# null

console.log(Object.prototype.__proto__ === null) // true
1

null 表示“没有对象”,即该处不应该有值。

foo

图中由红色线组成的链式结构即为原型链

现在我们知道了,[[Prototype]] 机制就是存在于对象中的一个内部链接,它会引用其他对象。

通常来说,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就会继续在[[Prototype]] 关联的对象上进行查找。同理,如果在后者中也没有找到需要的引用就会继续查找它的[[Prototype]] ,以此类推。这一系列对象的链接被称为“原型链”。


参考 mqyqingfeng (opens new window)

Last Updated: 8/13/2021, 5:05:35 PM