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