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