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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM