国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

理解Javascript_10_對(duì)象模型

2019-11-21 00:12:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
對(duì)象模型

紅色虛線表示隱式Prototype鏈。
這張對(duì)象模型圖中包含了太多東西,不少地方需要仔細(xì)體會(huì),可以寫些測(cè)試代碼進(jìn)行驗(yàn)證。徹底理解了這張圖,對(duì)JavaScript語(yǔ)言的了解也就差不多了。下面是一些補(bǔ)充說(shuō)明:
1. 圖中有好幾個(gè)地方提到build-in Function constructor,這是同一個(gè)對(duì)象,可以測(cè)試驗(yàn)證:
復(fù)制代碼 代碼如下:

//Passed in FF2.0, IE7, Opera9.25, Safari3.0.4
Function==Function.constructor //result: true
Function==Function.prototype.constructor //result: true
Function==Object.constructor //result: true
//Function also equals to Number.constructor, String.constructor, Array.constructor, RegExp.constructor, etc.
function fn(){}
Function==fn.constructor //result: true

這說(shuō)明了幾個(gè)問(wèn)題: Function指向系統(tǒng)內(nèi)置的函數(shù)構(gòu)造器(build-in Function constructor);Function具有自舉性;系統(tǒng)中所有函數(shù)都是由Function構(gòu)造。

2. 左下角的obj1, obj2...objn范指用類似這樣的代碼創(chuàng)建的對(duì)象: function fn1(){}; var obj1=new fn1();這些對(duì)象沒(méi)有本地constructor方法,但它們將從Prototype鏈上得到一個(gè)繼承的constructor方法,即fn.prototype.constructor,從函數(shù)對(duì)象的構(gòu)造過(guò)程可以知道,它就是fn本身了。


3.右下角的obj1, obj2...objn范指用類似這樣的代碼創(chuàng)建的對(duì)象: var obj1=new Object();或var obj1={};或var obj1=new Number(123);或obj1=//w+/;等等。所以這些對(duì)象Prototype鏈的指向、從Prototype鏈繼承而來(lái)的 constructor的值(指它們的constructor是build-in Number constructor還是build-in Object constructor等)等依賴于具體的對(duì)象類型。另外注意的是,var obj=new Object(123);這樣創(chuàng)建的對(duì)象,它的類型仍然是Number,即同樣需要根據(jù)參數(shù)值的類型來(lái)確定。同樣它們也沒(méi)有本地constructor,而是從Prototype鏈上獲得繼承的constructor方法,即build-in *** constructor,具體是哪一個(gè)由數(shù)據(jù)類型確定。
示例代碼

復(fù)制代碼 代碼如下:

//自定義對(duì)象代表,對(duì)應(yīng)Javascript Object Model中的use defined functions
function Foo(){}
//自定義對(duì)象創(chuàng)建的對(duì)象實(shí)例的代表,對(duì)應(yīng)Javascript Object Model中的objects that created by user defined functions
var foo = new Foo();
//String內(nèi)置函數(shù)代表
//str為內(nèi)置函數(shù)創(chuàng)建的對(duì)象實(shí)例的代表,對(duì)應(yīng)Javascript Object Model中的objects that created by build-in constructors
var str = new String("string");


內(nèi)存展現(xiàn)

你會(huì)發(fā)現(xiàn),它和《理解Javascript_09_Function與Object》中的內(nèi)存分析圖是一樣的,為什么呢?在《數(shù)據(jù)模型》中提到過(guò),內(nèi)置對(duì)象都可以看作是函數(shù)的派生類型,例如Number instanceof Function為true,Number instanceof Object為true。在這個(gè)意義上,可以將它們跟用戶定義的函數(shù)等同看待。所以內(nèi)置對(duì)象和自定義對(duì)象的創(chuàng)建流程是一樣的。

在篇博文是在理解了《Function與Object》的基礎(chǔ)上寫的,因此要理解本文必須理解Function與Object的關(guān)系!

最后寫一點(diǎn)感言:令人發(fā)狂的理論!
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 鹿泉市| 湘潭县| 孟连| 共和县| 苏尼特右旗| 武平县| 呼和浩特市| 高阳县| 普定县| 昌图县| 微山县| 宜君县| 岳阳市| 江口县| 罗山县| 肇源县| 灵寿县| 长寿区| 南充市| 鄂州市| 体育| 天峻县| 樟树市| 嘉善县| 清涧县| 漳浦县| 礼泉县| 涿鹿县| 灯塔市| 莒南县| 宁武县| 阿鲁科尔沁旗| 施甸县| 泰来县| 清镇市| 溆浦县| 和平区| 民权县| 泾阳县| 富裕县| 阳西县|