JavaScript Object.getPrototypeOf() 方法

Object.getPrototypeOf() 语法

Object.getPrototypeOf() 是 JavaScript 的一个静态方法,它用于获取某个实例对象的原型。

在 ES5 之前,我们可以通过 obj.__proto__ 属性(非标准,但广泛支持)来访问原型,但这种其实是非标准的方式。在 ES5 之后,强烈推荐使用 Object.getPrototypeOf() 来获取对象原型链,这也是官方推荐的方式。

语法:

Object.getPrototypeOf(obj)

说明:

Object.getPrototypeOf() 方法接收单个参数。

  • obj(必选):是一个实例对象。

Object.getPrototypeOf() 方法会返回指定对象的原型对象。

  • 如果 obj 是 Object.prototype 本身,或者是一个通过 Object.create() 创建的 “纯粹” 对象(即 Object.create(null)),则 Object.getPrototypeOf() 返回 null。
  • 如果 obj 不是一个对象,在 ES6+(现代浏览器)中,如果参数是基本类型(如 String、Number、Boolean),会先强制转换为对象。当参数是 nullundefined 时,则会抛出 TypeError 异常。”

注意:

  • getPrototypeOf() 方法是一个静态方法,它只能被类名(即 Object)调用,而无法被实例调用。
  • Object.getPrototypeOf() 是获取 “实例对象” 的原型,而不是获取 “构造函数” 的原型,这一点小伙伴们要严格区分。
  • getPrototypeOf() 用于获取原型,而 setPrototypeOf() 用于设置原型。

Object.getPrototypeOf() 摘要

属于 JavaScript Object 对象
使用频率
官方文档 查看
MDN 查看

Object.getPrototypeOf() 示例

接下来,我们通过几个简单的例子来讲解一下 Object.getPrototypeOf() 方法是如何使用的。

示例 1:Object.getPrototypeOf() 与 __proto__ 的区别

function F(){}
const f = new F();
const result = Object.getPrototypeOf(f) === f.__proto__;
console.log(result);

运行结果如下。

true

分析:

在这个例子中,我们定义了一个构造函数 F(),然后使用 new F() 实例化了一个对象 f。F 是一个构造函数,而 f 是一个实例对象。

想要获取实例对象的原型,除了使用 ES5 的 Object.getPrototypeOf(),我们还可以使用 ES5 之前的 __proto__ 来实现。但是现在官方已经舍弃 __proto__ 这种方式了,所以也不再建议小伙伴们继续使用。

示例 2:Object.getPrototypeOf() 与 prototype 的区别

function F(){}
const f = new F();
const result = Object.getPrototypeOf(f) === F.prototype;
console.log(result);

运行结果如下。

true

分析:

我们应该知道,构造函数的 prototype 属性指向的就是原型对象。其中,prototype 属性只能用于构造函数上,而不能用于实例对象上。如果想要获取实例对象的原型时,就不能使用 “xxx.prototype” 的方式了,而是应该使用 “Object.getPrototypeOf(xxx)” 来实现。

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号