三張圖帶你搞懂JavaScript的原型對象與原型鏈
對于新人來說,JavaScript的原型是一個(gè)很讓人頭疼的事情,一來prototype容易與__proto__混淆,二來它們之間的各種指向?qū)嵲谟行?fù)雜,其實(shí)市面上已經(jīng)有非常多的文章在嘗試說清楚,有一張所謂很經(jīng)典的圖,上面畫了各種線條,一會連接這個(gè)一會連接那個(gè),說實(shí)話我自己看得就非常頭暈,更談不上完全理解了。所以我自己也想嘗試一下,看看能不能把原型中的重要知識點(diǎn)拆分出來,用最簡單的圖表形式說清楚。
我們知道原型是一個(gè)對象,其他對象可以通過它實(shí)現(xiàn)屬性繼承。但是尼瑪除了prototype,又有一個(gè)__proto__是用來干嘛的?長那么像,讓人怎么區(qū)分呢?它們都指向誰,那么混亂怎么記???原型鏈又是什么鬼?相信不少初學(xué)者甚至有一定經(jīng)驗(yàn)的老鳥都不一定能完全說清楚,下面用三張簡單的圖,配合一些示例代碼來理解一下。
一、prototype和__proto__的區(qū)別

var a = {};
console.log(a.prototype); //undefined
console.log(a.__proto__); //Object {}
var b = function(){}
console.log(b.prototype); //b {}
console.log(b.__proto__); //function() {}
/*1、字面量方式*/
var a = {};
console.log(a.__proto__); //Object {}
console.log(a.__proto__ === a.constructor.prototype); //true
/*2、構(gòu)造器方式*/
var A = function(){};
var a = new A();
console.log(a.__proto__); //A {}
console.log(a.__proto__ === a.constructor.prototype); //true
/*3、Object.create()方式*/
var a1 = {a:1}
var a2 = Object.create(a1);
console.log(a2.__proto__); //Object {a: 1}
console.log(a.__proto__ === a.constructor.prototype); //false(此處即為圖1中的例外情況)
var A = function(){};
var a = new A();
console.log(a.__proto__); //A {}(即構(gòu)造器function A 的原型對象)
console.log(a.__proto__.__proto__); //Object {}(即構(gòu)造器function Object 的原型對象)
console.log(a.__proto__.__proto__.__proto__); //null到此這篇關(guān)于JavaScript原型對象與原型鏈的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解JavaScript中|單豎杠運(yùn)算符的使用方法
JavaScript中|單豎杠通常被用來對浮點(diǎn)型數(shù)字進(jìn)行取證,這里同時(shí)也介紹了單豎杠的運(yùn)算規(guī)則,下面我們就來詳解JavaScript中|單豎杠的使用方法2016-05-05
JavaScript實(shí)現(xiàn)關(guān)鍵字高亮功能
關(guān)鍵詞高亮技術(shù)各大CMS基本上都有,但基本都是后端代碼來實(shí)現(xiàn)的,今天我們探討下如何使用javascript來實(shí)現(xiàn)代碼高亮技術(shù)。2014-11-11
在javascript中創(chuàng)建對象的各種模式解析
下面小編就為大家?guī)硪黄趈avascript中創(chuàng)建對象的各種模式解析。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧2016-05-05
JavaScript學(xué)習(xí)筆記整理_用于模式匹配的String方法
下面小編就為大家?guī)硪黄狫avaScript學(xué)習(xí)筆記整理_用于模式匹配的String方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09

