什么是原型鏈
參考 MDN 繼承與原型鏈 - JavaScript | MDN (mozilla.org)
JavaScript 只有一種結(jié)構(gòu):對(duì)象。每個(gè)對(duì)象(object)都有一個(gè)私有屬性指向另一個(gè)名為原型(prototype)的對(duì)象。原型對(duì)象也有一個(gè)自己的原型,層層向上直到一個(gè)對(duì)象的原型為 null。根據(jù)定義,null 沒(méi)有原型,并作為這個(gè)原型鏈(prototype chain)中的最后一個(gè)環(huán)節(jié)??梢愿淖?cè)玩溨械娜魏纬蓡T,甚至可以在運(yùn)行時(shí)換出原型
舉例:
let a = []
a.__proto__ === Array.prototype // true
Array.prototype.__proto__ === Object.prototype //true
Object.prototype.__proto__ === null //true
上面xxx.__proto__ 在瀏覽器中用來(lái)表示 xxx的原型對(duì)象
遵循 ECMAScript 標(biāo)準(zhǔn),應(yīng)該用符號(hào)xxx.[[Prototype]] 來(lái)表示 xxx 的原型,在瀏覽器中打印xxx.[[Prototype]] 會(huì)報(bào)錯(cuò),Object.getPrototypeOf()可以獲得對(duì)象的原型對(duì)象,上面的例子 可以這樣表示
Object.getPrototypeOf(a) === Array.prototype //true
Object.getPrototypeOf(Array.prototype) === Object.prototype //true
Object.getPrototypeOf(Object.prototype) === null //true
如何修改原型
- Object.setPrototypeOf 影響性能,不推薦使用
- Object.create 推薦使用