簡單解析JavaScript中的__proto__屬性
JavaScript是一個面向?qū)ο笳Z音,即一切皆對象。
那么怎么生成對象?在Java的世界里,對象是由類(Class)實例出來的,通俗地說,就是將事物抽象成一個模具,用這個模具(類)生產(chǎn)出一個個具體的實物(對象)。
可是JS中沒有類這個概念,有的是“原型”,對象是由原型衍生出來的。通俗地說,在JS的世界里,“原型”并不是一個模具,而是一個具體的實物(對象)。所有對象都是由另一個對象衍生出來的,而這個被衍生的對象就是所謂的“原型對象”。
在javascript中有三類對象,1用戶創(chuàng)建的對象,2構(gòu)造函數(shù)的對象,3原型對象
- 用戶創(chuàng)建的對象,一般意義上使用new語句顯式構(gòu)造的方法。
- 構(gòu)造函數(shù)的對象,普通的構(gòu)造函數(shù),即通過new調(diào)用生成普通對象的函數(shù)
- 原型對象,構(gòu)造函數(shù)prototype屬性指向的對象。
這三個對象中每一個類都有一個屬性-__proto__屬性,它們指向該對象的原型,從任何對象沿用它開始遍歷都可以追溯到Object.prototype。
構(gòu)造函數(shù)都有prototype對象,它指向一個原型對象,通過該構(gòu)造函數(shù)創(chuàng)建對象的時候,被創(chuàng)建的對象的__proto__屬性將指向構(gòu)造函數(shù)的prototype屬性。
原型對象有一個constructor屬性,該屬性指向它對應(yīng)的構(gòu)造函數(shù)。
Talk is cheap, show me the code! 咱們來看看代碼:
var obj = {}; console.log(obj);
咱們將__proto__展開看看:是一些默認(rèn)方法。
你一定會發(fā)生這個__proto__對象中也有一個__proto__對象,正如我們剛才說的,每個對象都有一個__proto__屬性指向它的原型對象。我們打印一下這個__proto__中的__proto__:
console.log(obj.__proto__.__proto__); //--> null
結(jié)果是null,說明已經(jīng)到了頂層原型對象。obj是用大括號{}定義的,obj的原型對象自然是JS的頂層對象。
咱們再看一端代碼,加強下理解:
var parent = { name : "parent" }; var child = { name : "child", __proto__ : parent }; var subChild = { name : "subChild", __proto__ : child } console.log(subChild);
- subChild.__proto__ --> child
- child.__proto__ --> parent
- parent.__proto__ --> 頂層原型對象
- js中繼承的幾種用法總結(jié)(apply,call,prototype)
- JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的區(qū)別和應(yīng)用場景簡述
- JavaScript中的prototype使用說明
- js中的hasOwnProperty和isPrototypeOf方法使用實例
- 不錯的一篇關(guān)于javascript-prototype繼承
- js中prototype用法詳細介紹
- JavaScript prototype 使用介紹
- Javascript中Array.prototype.map()詳解
- JS面向?qū)ο蟆rototype、call()、apply()
- 數(shù)據(jù)排序誰最快(javascript中的Array.prototype.sort PK 快速排序)
- JavaScript isPrototypeOf和hasOwnProperty使用區(qū)別
- JS 面向?qū)ο笾衿娴膒rototype
相關(guān)文章
JavaScript中的setMilliseconds()方法使用詳解
這篇文章主要介紹了JavaScript中的setMilliseconds()方法使用詳解,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-06-06actionscript與javascript的區(qū)別
actionscript是flash的腳本語言,目前已經(jīng)由adobe公司升級到3.0版本,成為了真正意義的oop語言,JavaScript是由netscape工程師設(shè)計完成的一門腳本語言,用于web開發(fā)的前端腳本2011-05-05javascript實現(xiàn)playfair和hill密碼算法
這篇文章主要介紹了javascript實現(xiàn)playfair和hill密碼算法,需要的朋友可以參考下2014-12-12探討JavaScript中的Rest參數(shù)和參數(shù)默認(rèn)值
這篇文章的主要介紹了JavaScript中的Rest參數(shù)和參數(shù)默認(rèn)值,內(nèi)容很充實,需要了解的朋友可以參考下2015-07-07