Skip to content

怎么获取一个对象的原型

Object.getPrototypeOf

js
class Person {}
let p1 = new Person();
Object.getPrototypeOf(p1) === Person.prototype;

__proto__

js
class Person {}
let p1 = new Person();
p1.__proto__ === Person.prototype;

constructor.prototype

js
class Person {}
let p1 = new Person();
p1.constructor.prototype === Person.prototype;

原型对象和构造函数关系

在 js 中,每当定义一个函数类型的时候,都会天生自带一个 prototype 属性,这个属性指向函数的原型对象

在函数经过 new 调用时,这个函数就成了构造函数,返回一个全新的实例对象,这个实例对象有一个prototype属性,指向构造函数的原型对象

20210610153911

<!-- more -->

原型链

JavaScript 对象通过 prototype 指向父类对象,直到指向 Object 对象为止,这样就形成了一个原型指向的链条, 即原型链。

20210610154002

20210610154407

  • 对象的 hasOwnProperty() 来检查对象自身中是否含有该属性
  • 使用 in 检查对象中是否含有某个属性时,如果对象中没有但是原型链中有,也会返回 true

链表

还有一种解释是用链表解释, next 就是prototype,value 就是 prototype

一提链表,面试官就知道你懂了

js
function Node() {
    this.value = prototype,
    this.next = __prototype__,
}

参考链接