日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Js 原型对象与原型链(转)

發布時間:2025/6/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Js 原型对象与原型链(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文出處 原創作者: abruzzi
原文圖文并茂,很好的說明了原型鏈的原理在這里感謝原文作者把文章寫的那么通俗易懂。

原型對象

  每個javascript對象都有一個原型對象,這個對象在不同的解釋器下的實現不同。比如在firefox下,每個對象都有一個隱藏的__proto__屬性,這個屬性就是“原型對象”的引用。

原型鏈

  由于原型對象本身也是對象,根據上邊的定義,它也有自己的原型,而它自己的原型對象又可以有自己的原型,這樣就組成了一條鏈,這個就是原型鏈,JavaScritp引擎在訪問對象的屬性時,如果在對象本身中沒有找到,則會去原型鏈中查找,如果找到,直接返回值,如果整個鏈都遍歷且沒有找到屬性,則返回undefined.原型鏈一般實現為一個鏈表,這樣就可以按照一定的順序來查找。

示例1

var base = { name : "base", getInfo : function(){ return this.name; } } var ext1 = { id : 0, __proto__ : base } var ext2 = { id : 9, __proto__ : base } print(ext1.id); print(ext1.getInfo()); print(ext2.id); print(ext2.getInfo());

?結果

0 base 9 base

?圖1

  可以看到,當執行ext1.id時,引擎在ext1對象本身中就找到了id屬性,因此返回其值0,當執行ext1.getInfo時,ext1對象中沒有找到,因此在其原型對象base中查找,找到之后,執行這個函數,得到輸出”base”。

我們將上例中的ext1對象稍加修改,為ext1對象加上name屬性:

示例2

var base = { name : "base", getInfo : function(){ return this.name; } } var ext1 = { id : 0, name : "ext1", __proto__ : base } print(ext1.id); print(ext1.getInfo());

?結果

0 ext1

  這個運行效果同樣驗證了原型鏈的運行機制:從對象本身出發,沿著__proto__查找,直到找到屬性名稱相同的值(沒有找到,則返回undefined)。

我們對上例再做一點修改,來更好的演示原型鏈的工作方式:

示例3

var base = { name : "base", getInfo : function(){ return this.id + ":" + this.name; } } var ext1 = { id : 0, __proto__ : base } print(ext1.getInfo());

?結果

0:base

?  應該注意的是,getInfo函數中的this表示原始的對象,而并非原型對象。上例中的id屬性來自于ext1對象,而name來自于base對象。這個特性的機制在10.3小節再做討論。如果對象沒有顯式的聲明自己的”__proto__”屬性,這個值默認的設置為Object.prototype,而Object.prototype的”__proto__”屬性的值為”null”,標志著原型鏈的終結。

構造器

  我們在來討論一下構造器,除了上邊提到的直接操作對象的__proto__屬性的指向以外,JavaScript還支持構造器形式的對象創建。構造器會自動的為新創建的對象設置原型對象,此時的原型對象通過構造器的prototype屬性來引用。

我們以例子來說明,將Task函數作為構造器,然后創建兩個實例task1, task2:

示例4

function Task(id){ this.id = id; } Task.prototype.status = "STOPPED"; Task.prototype.execute = function(args){ return "execute task_"+this.id+"["+this.status+"]:"+args; } var task1 = new Task(1); var task2 = new Task(2); task1.status = "ACTIVE"; task2.status = "STARTING"; print(task1.execute("task1")); print(task2.execute("task2"));

?結果

execute task_1[ACTIVE]:task1 execute task_2[STARTING]:task2

?  構造器會自動為task1,task2兩個對象設置原型對象Task.prototype,這個對象被Task(在此最為構造器)的prototype屬性引用,參看下圖中的箭頭指向。

圖2

  由于Task本身仍舊是函數,因此其”__proto__”屬性為Function.prototype, 而內建的函數原型對象的”__proto__”屬性則為Object.prototype對象。最后Obejct.prototype的”__proto__”值為null。

轉載于:https://www.cnblogs.com/xqhppt/archive/2012/02/01/2334355.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Js 原型对象与原型链(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲网站在线看 | 久久国产欧美日韩精品 | av成人天堂 | 亚洲成年 | 精品午夜一区二区 | 超碰青青操 | 色黄视频 | 日日夜夜狠 | 四虎在线观看 | 欧美精品h | 亚洲精品成人影视 | 久久久久久久久国产精品 | 亚洲伦理网站 | 日韩精品tv | 久久久久人妻精品色欧美 | 无码成人精品区一级毛片 | 中文字幕3页 | 97国产视频 | 色欲AV无码精品一区二区久久 | 日本一二区视频 | 欧洲色区 | 黑人精品欧美一区二区蜜桃 | 毛片网站在线免费观看 | 亚洲自拍偷拍网站 | 国产福利网 | 国产黄色在线播放 | 亚洲天堂一区二区在线 | 91麻豆国产在线 | 播播成人网 | 日韩黄色在线观看 | 免费毛片观看 | 欧美大胆视频 | 四虎影院在线视频 | 色多多视频网站 | 日本日韩欧美 | 欧洲视频在线观看 | 杏导航aⅴ福利网站 | 羞羞动漫免费观看 | 18禁男女爽爽爽午夜网站免费 | 午夜剧场在线 | 亚洲一区免费看 | 麻豆一区二区三区精品视频 | 男女爱爱动态图 | 久久国产乱子伦精品 | 日韩午夜剧场 | 欧美成人三级在线视频 | 无码粉嫩虎白一线天在线观看 | 久久一区二区视频 | 69福利社区 | 亚洲天堂男人天堂 | 亚洲免费毛片 | 日韩精品欧美精品 | 国产成人精品无码片区在线 | 91免费看网站 | www.色在线观看 | 日韩影视一区 | 日韩av高清 | 91超碰在线 | 欧美精品久久久久久 | 可以看的黄色网 | 免费在线播放视频 | 都市激情男人天堂 | 成人中文字幕在线观看 | 女生隐私免费看 | 亚洲av成人精品毛片 | 中文字幕一级 | 国产这里只有精品 | 国产精品hd | 中文字幕在线观看免费视频 | 伊人久操| 永久免费的av网站 | 狠狠婷| jizzjizz视频 | 精品国产一区二区三区无码 | 亚洲国产97在线精品一区 | 久久国产精品精品国产 | 免费午夜视频在线观看 | 另类老妇性bbwbbw图片 | 夫妻黄色片 | 国产情侣自拍小视频 | 日本一区二区免费在线 | 欧美1区2区3区| 麻豆视频播放 | 在线欧美一区二区 | 在线观看免费视频黄 | 久久人人看 | 18成人免费观看视频 | www.狠狠| 国产成人av一区二区三区 | 午夜影片 | 好吊一区二区三区 | 91午夜在线观看 | 夜夜爽夜夜叫夜夜高潮漏水 | 性综艺节目av在线播放 | 亚洲视频天堂 | 主播一区二区 | 欧美激情中文字幕 | 精品裸体舞一区二区三区 | 欧美熟妇另类久久久久久不卡 |