什么是原型?
可以理解成制作時(shí)依賴的參照物荷科,比如說唯咬,有人對(duì)著你畫了一張你的畫像,那么你本人就是這張畫像的原型畏浆,如果再有人仿造你的畫像又畫了一幅副渴,那么你的畫像就是這個(gè)人仿畫的原型。
畫像裝不下的盛世美顏還可以以你為原型搞一些雕塑全度,當(dāng)然這里不管畫像還是雕塑終極都是以你本人為原型煮剧。那你本人的原型呢,是指向基因的,這就由表面指向內(nèi)部生物性勉盅,性質(zhì)上發(fā)生了很大變化佑颇,我們當(dāng)做到這里停止了。
以上這些放在 js 世界里可以這么解釋草娜。
有一個(gè)對(duì)象原型我們稱為 Object.prototype (把它當(dāng)成上面的你本人)矾睦, Object.prototype 的原型就指向 null(理解成上面的基因) 為最終停止盐须,null 就沒有原型了袜腥,但仍然與 Object.prototype 有關(guān)郊霎,代表一個(gè)特殊的對(duì)象原型。如果要?jiǎng)?chuàng)建其他對(duì)象我們都會(huì)以這個(gè) Object.prototype 為原型移袍,比如隨便兩個(gè):
var obj={};
var obj2=Object.create(obj);
Object.getPrototypeOf(obj)===Object.prototype // true
Object.getPrototypeOf(Object.getPrototypeOf(obj))===null // true
Object.getPrototypeOf(obj2)===obj // true
雖然這里 obj 是一個(gè)空對(duì)象 解藻,可以用 js 的內(nèi)置方法 Object.getPrototypeOf(obj) 獲取到 obj 的原型,仍然是 Object.prototype葡盗,當(dāng)然可以試試 Object.getPrototypeOf 獲取 Object.prototype 的原型是 null螟左。
還有用 Object.create 這個(gè)方法新建了一個(gè)對(duì)象,所以新對(duì)象的原型指向 obj觅够,那 obj2 這里就有一條線是 obj2的原型屬性指向 obj胶背,obj的原型指向 Object.prototype ,最終指向null喘先,我們就稱這條線為 原型鏈钳吟。
因?yàn)?js 里的原型都是對(duì)象,原型跟原型對(duì)象實(shí)際上是同一個(gè)概念窘拯。
到這里原型红且、原型對(duì)象和原型鏈就說完了,下面補(bǔ)充點(diǎn)其他內(nèi)容树枫。
之前在 js的new運(yùn)算符詳解 這篇文章里說過創(chuàng)建對(duì)象的三種方法,剛剛舉例說了兩種還有第三種如下:
var obj3=new Object(obj);
Object.getPrototypeOf(obj3)===Object.prototype // true
那么 obj2 和 obj3 的區(qū)別就是景东,obj2是原型指向 obj 的空對(duì)象砂轻,而 obj3 是將 obj 的引用地址賦值給了 obj3,它等同于 obj 斤吐。所以搔涝,Object.getPrototypeOf(obj3)===Object.prototype 返回 true。
感謝閱讀和措,喜歡的話點(diǎn)個(gè)贊吧:)
更多內(nèi)容請(qǐng)關(guān)注后續(xù)文章庄呈。。派阱。