Object函数的内置方法 Object.getPrototypeOf和Object.setPrototypeOf

Object.getPrototypeOf

一、定义

Object.getPrototypeOf()方法用于获取指定对象的原型对象。

二、语法

Object.getPrototypeOf(obj);

参数

obj:要获取原型对象的对象。

返回值

返回指定对象的原型对象或null。

 

在ES5中,如果传递给方法的参数不是对象,则会抛出TypeError异常。

在ES6中,如果传递给方法的参数不是对象,则会强制类型转换为对象。

三、示例

示例1:获取对象的原型对象

var a = {};
Object.getPrototypeOf(a) === Object.prototype; // true

var b = 123;
Object.getPrototypeOf(b) === Number.prototype; // true

var c = 'abc';
Object.getPrototypeOf(c) === String.prototype; // true

var d = false;
Object.getPrototypeOf(d) === Boolean.prototype; // true

var e = null;
Object.getPrototypeOf(e); // TypeError: Cannot convert undefined or null to object

var f = undefined;
Object.getPrototypeOf(f); // TypeError: Cannot convert undefined or null to object

var g = Symbol('g');
Object.getPrototypeOf(g) === Symbol.prototype; // true

示例2:针对没有原型对象的对象进行操作

// 创建一个没有原型对象的对象
var obj = Object.create(null);
Object.getPrototypeOf(obj); // null

 

Object.setPrototypeOf

一、定义

Object.setPrototypeOf()方法用于将指定对象的原型对象设置到一个新的对象或null上。

二、语法

Object.setPrototypeOf(obj, proto);

参数

obj:要设置原型对象的对象。

proto:该对象的新原型对象或null,否则抛出TypeError异常。

返回值

设置了新的原型对象的对象。

 

注意:该操作实际上是个很耗时的操作,如果对性能有更高的要求,不建议直接修改已有对象的原型,而应该通过Object.create()方法来创建一个新的对象。

三、示例

示例:修改对象的原型对象

var obj1 = { a: 1 };
// obj2的原型是obj1
var obj2 = Object.create(obj1);
Object.getPrototypeOf(obj2) === obj1; // true
obj2.a; // 1

var obj3 = { b: 2 };
// 修改obj2的原型为obj3
Object.setPrototypeOf(obj2, obj3);
Object.getPrototypeOf(obj2) === obj3; // true
obj2.a; // undefined
obj2.b; // 2

 

posted @ 2022-03-30 11:41  之鹿喵  阅读(712)  评论(0编辑  收藏  举报