日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JavaScript中變量的存儲(chǔ)方式

瀏覽:28日期:2023-11-23 15:35:13
基本原理

前面文章提到過(guò),在js中變量包括5中基本類型以及一個(gè)復(fù)雜數(shù)據(jù)類型Object,當(dāng)然常用的函數(shù)和數(shù)組都是對(duì)象。對(duì)于基本類型和復(fù)雜類型,對(duì)應(yīng)著兩種不同的存儲(chǔ)方式–棧存儲(chǔ)和堆存儲(chǔ)。為什么要實(shí)現(xiàn)兩種存儲(chǔ)方式的理由很簡(jiǎn)單,就是基本類型一旦初始化則內(nèi)存大小固定,訪問變量就是訪問變量的內(nèi)存上實(shí)際的數(shù)據(jù),稱之為按值訪問。而對(duì)象類型說(shuō)不定什么時(shí)候就會(huì)增加自身的大小,內(nèi)存大小不固定。比如動(dòng)態(tài)添加對(duì)象的屬性、動(dòng)態(tài)增加數(shù)組的大小等等都會(huì)使變量大小增加,無(wú)法在棧中維護(hù)。所以js就把對(duì)象類型的變量放到堆中,讓解釋器為其按需分配內(nèi)存,而通過(guò)對(duì)象的引用指針對(duì)其進(jìn)行訪問,因?yàn)閷?duì)象在堆中的內(nèi)存地址大小是固定的,因此可以將內(nèi)存地址保存在棧內(nèi)存的引用中。這種方式稱之為按引用訪問。 嗯,理解這一點(diǎn)很重要,在以后的編程中可以避免很多問題。 我們來(lái)看下如下的代碼:

var a = ’I am a string.’; //a,b,c的變量中保存的都是實(shí)際的值,因?yàn)樗麄兪腔绢愋偷淖兞縱ar b = 1010;var c = false;var d = a; //d中保存著和“a值一樣的副本,它們互不影響”a = ’I am different from d’;alert(d); //輸出’I am a string’

以上代碼很好理解,就是說(shuō)按值訪問的變量復(fù)制“你的就是你的,我的就是我的,咱們都有副本,互不影響。”而對(duì)于按引用訪問則稍有不同:

var e = {name : ’I am an object’,setName : function(name){this.name = name;}};var f = e; //賦值操作,實(shí)際上的結(jié)果是e,f都是指向那個(gè)對(duì)象的引用指針f.setName(’I am different from e,I am object f.’);alert(e.name); //對(duì)f進(jìn)行操作,e的值也改變了!

對(duì)于引用類型的賦值,說(shuō)白了,就是把那個(gè)對(duì)象的指針復(fù)制了過(guò)去,兩個(gè)指針指向的都是同一個(gè)實(shí)體對(duì)象,不存在副本,原本的對(duì)象還是只有一個(gè)!好。以上就是基本類型和引用類型的最大最根本的差別!我用一張圖來(lái)形象的表示下:

JavaScript中變量的存儲(chǔ)方式

*棧內(nèi)存中存放基本類型變量,以及對(duì)象的指針;堆中存放對(duì)象實(shí)體

JavaScript中變量的存儲(chǔ)方式

*復(fù)制前后棧和堆中的情況

引用類型引發(fā)的問題1.使用原型模型創(chuàng)建對(duì)象的問題

我們都知道,在JavaScript OO(Object Oriented)中,使用原型模式創(chuàng)建對(duì)象的最大的好處就是可以讓對(duì)象實(shí)例共享原型(prototype)所包含的屬性和方法。這樣就避免了構(gòu)造函數(shù)模式的缺陷,即每個(gè)對(duì)象都會(huì)有每個(gè)方法的副本,每個(gè)方法都會(huì)在每個(gè)實(shí)例上重新創(chuàng)建一遍,方法重用無(wú)意義的問題。

嗯,使用原型模式是為所有實(shí)例共享了方法,但是當(dāng)原型中有引用類型值的屬性的時(shí)候,問題就來(lái)了:

var Person = function(){};Person.prototype = {constructor : Person,name : ’Hanzongze’,hobby : [’basketable’, ’swiming’, ’running’], //注意,這里包含著一個(gè)引用類型的屬性sayName : function(){alert(this.name);}};var person1 = new Person();var person2 = new Person();person1.hobby.push(’music’);alert(person2.hobby); //輸出為’basketable’, ’swiming’, ’running’,’music’alert(person1.hobby === person2.hobby); //true

由于hobby屬性是引用類型的值,所以由Person構(gòu)造函數(shù)創(chuàng)建出來(lái)的實(shí)例的hobby屬性,都會(huì)指向這一個(gè)引用實(shí)體,實(shí)例對(duì)象間的屬性互相干擾。這不是我們想要的結(jié)果,為避免這類問題,解決方案就是組合使用構(gòu)造函數(shù)模型和原型模型:

var Person = function(){this.name = ’Hanzongze’;this.hobby = [’basketable’, ’swiming’, ’running’]; //對(duì)引用類型的值使用構(gòu)造函數(shù)模式};Person.prototype = {constructor : Person,sayName : function(){alert(this.name);}};var person1 = new Person();var person2 = new Person();person1.hobby.push(’music’);alert(person2.hobby); //輸出 ’basketable’, ’swiming’, ’running’,說(shuō)明對(duì)person1的修改沒有影響到person2alert(person1.hobby === person2.hobby); //false2.原型繼承中的問題

這個(gè)問題與上一個(gè)的本質(zhì)其實(shí)是一樣的,只不過(guò)是發(fā)生在了原型繼承的背景中。看一個(gè)原型鏈繼承的問題:

var Person = function(){this.name = ’Hanzongze’;this.hobby = [’basketable’, ’swiming’, ’running’];};Person.prototype = {constructor : Person,sayName : function(){alert(this.name);}};//子類型Studentfunction Student(){}Student.prototype = new Person(); //Student繼承了Personvar student1 = new Student();var student2 = new Student();student1.hobby.push(’music’); //對(duì)子類實(shí)例student1的引用屬性做了改動(dòng)var student3 = new Student();alert(student2.hobby); //輸出’basketable’, ’swiming’, ’running’, ’music’alert(student3.hobby); //輸出’basketable’, ’swiming’, ’running’, ’music’

在這段代碼中,可以看到,子類Student繼承自父類Person。但由于使用的是原型繼承,也就是說(shuō)父類的實(shí)例作為了子類的原型,那么實(shí)例中的引用類型屬性也就繼承在了子類的原型prototype中去了。則子類的實(shí)例共享該引用屬性,相互影響。

解決方案,那就是使用借用構(gòu)造函數(shù)方案(但是也不是理想的方案,理想的方案是組合使用原型鏈和借用構(gòu)造函數(shù)。涉及到了比較多的繼承模式,這里簡(jiǎn)單描述,以后會(huì)寫一篇詳細(xì)的文章):

var Person = function(){this.name = ’Hanzongze’;this.hobby = [’basketable’, ’swiming’, ’running’];};Person.prototype = {constructor : Person,sayName : function(){alert(this.name);}};function Student(){//借用構(gòu)造函數(shù),繼承了PersonPerson.call(this);}var student1 = new Student();var student2 = new Student();student1.hobby.push(’music’);alert(student2.hobby); //輸出’basketable’, ’swiming’, ’running’, ’music’

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91综合视频| 中文在线免费视频| 性一交一乱一区二区洋洋av| 成人av二区| 欧美日韩亚洲在线观看| 99久久亚洲精品| 亚洲精品网址| 日韩精品一区二区三区中文在线 | 日韩欧美另类一区二区| 亚洲女同av| 成人国产精品一区二区网站| 日韩欧美字幕| 亚洲黄色影院| 亚洲精品在线国产| 国产麻豆一区二区三区精品视频| 欧美精品1区| 日韩影院二区| 中文在线一区| 日韩国产欧美在线播放| 欧美激情精品| 久久视频国产| 亚洲三级精品| 麻豆一区二区在线| 久久国产免费| 日韩亚洲精品在线观看| 日本午夜精品一区二区三区电影| 久草精品视频| 欧美日韩日本国产亚洲在线| 日韩二区在线观看| 欧美xxxx中国| 国产亚洲一级| 国产精品一区二区免费福利视频| 成人国产精品久久| 欧美在线亚洲| 国产视频网站一区二区三区| 日韩成人高清| 婷婷精品在线| 精品国产第一福利网站| 亚洲欧美日韩在线观看a三区| 国产精品日本一区二区三区在线| 粉嫩av一区二区三区四区五区| 欧美日韩国产传媒| 日韩和欧美一区二区| 精品理论电影在线| 久久福利精品| 国产一区二区三区不卡视频网站| 日韩午夜在线| 久久精品三级| 日韩专区欧美专区| 美女高潮久久久| 国产精品丝袜xxxxxxx| 麻豆精品国产91久久久久久| 日韩视频免费| 国产成人黄色| 日本aⅴ免费视频一区二区三区| 国内精品亚洲| 亚洲狼人精品一区二区三区| 日韩在线二区| 国产欧美日韩一级| 悠悠资源网久久精品| 精品一区二区三区视频在线播放| 石原莉奈在线亚洲二区| 日韩中文在线电影| 国产精品亚洲综合久久| 中文在线一区| 成人在线网站| 老司机免费视频一区二区| 视频一区二区三区中文字幕| 麻豆成全视频免费观看在线看| 97成人在线| aa国产精品| 久久久久美女| 精品入口麻豆88视频| 日韩精品午夜视频| 在线综合视频| 色婷婷久久久| 精品国产精品国产偷麻豆 | 91午夜精品| 日韩午夜一区| 久久青草久久| 激情黄产视频在线免费观看| 国产精品久久久久久久久久妞妞| 日韩精品一二三| 日韩成人亚洲| 精品一级视频| 国产精品入口久久| 日韩欧美四区| 免费在线观看一区二区三区| 美女少妇全过程你懂的久久| 97精品国产福利一区二区三区| 国产极品嫩模在线观看91精品| 亚洲精品影视| 中文日韩在线| 99久久精品网站| 国产资源在线观看入口av| 国产欧美69| 欧美日韩1区2区3区| 爽好久久久欧美精品| 国产在线观看www| 精品一区二区三区视频在线播放| 国产日产一区| 欧美亚洲三级| 91在线成人| 日本不卡一区二区| 婷婷精品在线观看| 婷婷五月色综合香五月| 午夜视频一区二区在线观看| 美女日韩在线中文字幕| 欧美日韩视频| 在线综合视频| 丝袜诱惑制服诱惑色一区在线观看 | 欧美a级一区| 亚洲不卡系列| 中文字幕系列一区| 久久精品中文| 99久久99久久精品国产片果冰| 色婷婷精品视频| 日韩电影在线视频| 日韩和的一区二在线| 九色porny丨国产首页在线| 精品日韩视频| 狠狠久久婷婷| 中文字幕中文字幕精品| 日韩精品福利一区二区三区| 日本成人一区二区| 欧美亚洲tv| 欧美激情麻豆| 91日韩免费| 秋霞影视一区二区三区| 91精品亚洲| 性欧美精品高清| 亚洲精品黄色| 91精品国产自产精品男人的天堂| 奇米狠狠一区二区三区| 国产精品极品| 久久电影tv| 黑丝一区二区三区| 香蕉久久久久久| 国产精品宾馆| 福利精品一区| 久久要要av| 视频一区免费在线观看| 日本欧美在线| 精品久久免费| 欧美亚洲精品在线| 视频一区视频二区在线观看| 日韩国产在线观看| 精品精品久久| 在线国产一区| 91国内精品| 日韩大片在线| 美女日韩在线中文字幕| 国产欧美一区二区三区精品观看| 国产一区二区精品福利地址| 日韩欧美午夜| 丝袜诱惑制服诱惑色一区在线观看| 日韩va亚洲va欧美va久久| 国产一区国产二区国产三区| 韩国女主播一区二区三区| 欧美日韩亚洲在线观看| 日韩专区在线视频| 欧美黄色一区| 欧美在线亚洲综合一区| 91亚洲精品视频在线观看 | 偷拍精品精品一区二区三区| 午夜宅男久久久| 麻豆一区二区三区| 国产一区亚洲| 欧美日韩亚洲一区三区| 日韩在线短视频| 三级久久三级久久久| 日本在线啊啊| 亚洲免费观看高清完整版在线观| 麻豆国产精品一区二区三区| 亚洲福利一区| 18国产精品| 91精品推荐| 91伊人久久| 视频一区中文| 国产精品黄色片| 99国产精品久久久久久久成人热| 国产欧美欧美| 偷拍欧美精品| 欧美激情视频一区二区三区在线播放| 九一成人免费视频| 久久99久久久精品欧美| 波多野结衣一区| 国产精品sss在线观看av| 欧洲激情综合| 精品久久久久中文字幕小说| 丝袜美腿成人在线| 国产va在线视频| 日本天堂一区| 国产精品日韩久久久| 国产乱码午夜在线视频| 欧美中文一区| 丝袜脚交一区二区| 成人美女视频| 国产剧情在线观看一区| 免费在线观看一区二区三区|