亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

javascript繼承問題

瀏覽:47日期:2023-03-23 13:49:04

問題描述

代碼如下:

function Father(){ this.name = true; this.array = [];}Father.prototype.getFatherValue = function(){ return this.property;}function Son(){ this.sonProperty = false;}//繼承 FatherSon.prototype = new Father();var son1 = new Son();var son2 = new Son();

其中Father的array屬性會被son1和son2共用,但是name屬性不會被共用,我的理解是,son1和son2都會去Son.prototype找name屬性,name屬性應該也是被共用的呀,為什么不是呢?

問題解答

回答1:

因為數組是引用類型,對于father(new Father()),son1,son2,這三個實例來說,他們array保存的都是[]這個數組的引用,所以只要其中一個修改了,順著引用找到內存中的數組就會修改,修改的就是同一個數組。而name = true,這個name是基本類型,在分別new實例的時候,會在內存中各開辟一塊區域內存放它的值,因此上述三個實例的name對應的是不同內存區域的值,所以修改了就不會互相影響。看來樓上的一些回答后,思考了一下,發現我的理解,我的答案是有錯的。保留原答案,下面更正一下。關于數組那一塊沒有問題,問題在name這個屬性,對于son1,son2來說,他們是沒有name這個屬性的,所以在new的時候,應該是沒有為他們的name開辟內存空間的。只有father這個實例有。son1,son2的name值是通過原型鏈查找找到的,如果對son1.name進行賦值,那么相當于給son1這個實例添加了name屬性,當然再次打印son1.name時取到的值是屬于son1的name值,而打印son2.name,則會去原型鏈上找name,這個時候找到的是Father的name值,因此兩個值不同,可能會給你造成沒有共用的錯覺。值得注意的是,如果son1.array[0] = 1這么賦值的話,那么對三個實例的array都會有影響,如果是son1.array = [1],這么賦值就不會,因為這時候array保留的是對[1]這個新數組內存地址的引用。

回答2:

son1.array.push(1)son1.array // [1]son2.array // [2]son1.array = [2]son1.array // [2]son2.array // [1]

你說array是共用的?

回答3:

為什么說 name 屬性不會被共用呢?

javascript繼承問題

原型鏈繼承,就是順著原型鏈一直找,直到找到后返回此值,如果找不到,返回 undefined。

如果我們給 Son 賦值

son1.name = ’aa’;son2.name = ’bbb’;

此時就是取實例的值。只有在 Son 沒有相應的屬性時,才去原型鏈找。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 可以免费看的黄色网址 | 国产无套视频在线观看香蕉 | 天天欲色成人综合网站 | 啪啪网视频| 日韩视频www| 国产精品久久久久久久久免费 | 一区二区三区免费视频播放器 | 精选国产门事件福利在线观看 | 麻豆传媒2021精品传媒一区 | 九九精品免费 | 久久国产免费观看精品1 | 亚洲狠狠婷婷综合久久久久 | 成年视频xxxxx免费播放软件 | 色天天影视 | 国产免费一级高清淫曰本片 | 久久精品国产72国产精福利 | 无耻三级在线观看 | 大尺度做爰床戏呻吟免费观看91 | 91久久综合九色综合欧美亚洲 | 欧美性大片免费 | 黄色毛片免费网站 | 91视频大全| 国产精品三级在线观看 | 国产97碰免费视频 | qvod激情视频在线观看 | 在线观看精品自拍视频 | 1024cc香蕉在线观看免费 | 美女免费精品高清毛片在线视 | 久久久久琪琪免费影院 | 精品视频一区二区三区免费 | 在线免费观看国产视频 | 国产午夜人做人视频羞羞 | 亚洲成在人线影视天堂网 | 国产日韩欧美精品一区二区三区 | 免费香蕉视频国产在线看 | 亚洲自偷自拍另类12p | 成人免费福利视频在线观看 | 精品日韩欧美 | 1024国产基地永久免费 | 欧美日韩在线观看精品 | 中国一级大黄大片 |