麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > WEB開發 > 正文

深入理解javascript原型和閉包(6)——繼承

2024-04-27 15:16:23
字體:
來源:轉載
供稿:網友

原文地址:http://www.cnblogs.com/wangfupeng1988/p/3979985.html

為何用“繼承”為標題,而不用“原型鏈”?

原型鏈如果解釋清楚了很容易理解,不會與常用的java/C#產生混淆。而“繼承”確實常用面向對象語言中最基本的概念,但是java中的繼承與javascript中的繼承又完全是兩回事兒。因此,這里把“繼承”著重拿出來,就為了體現這個不同。

 

Javascript中的繼承是通過原型鏈來體現的。先看幾句代碼

以上代碼中,f1是Foo函數new出來的對象,f1.a是f1對象的基本屬性,f1.b是怎么來的呢?——從Foo.PRototype得來,因為f1.__proto__指向的是Foo.prototype

訪問一個對象的屬性時,先在基本屬性中查找,如果沒有,再沿著__proto__這條鏈向上找,這就是原型鏈。

看圖說話:

上圖中,訪問f1.b時,f1的基本屬性中沒有b,于是沿著__proto__找到了Foo.prototype.b。

 

那么我們在實際應用中如何區分一個屬性到底是基本的還是從原型中找到的呢?大家可能都知道答案了——hasOwnProperty,特別是在for…in…循環中,一定要注意。

 

等等,不對! f1的這個hasOwnProperty方法是從哪里來的? f1本身沒有,Foo.prototype中也沒有,哪兒來的?

好問題。

它是從Object.prototype中來的,請看圖:

對象的原型鏈是沿著__proto__這條線走的,因此在查找f1.hasOwnProperty屬性時,就會順著原型鏈一直查找到Object.prototype。

 

由于所有的對象的原型鏈都會找到Object.prototype,因此所有的對象都會有Object.prototype的方法。這就是所謂的“繼承”。

當然這只是一個例子,你可以自定義函數和對象來實現自己的繼承。

 

說一個函數的例子吧。

我們都知道每個函數都有call,apply方法,都有length,arguments,caller等屬性。為什么每個函數都有?這肯定是“繼承”的。函數由Function函數創建,因此繼承的Function.prototype中的方法。不信可以請微軟的Visual Studio老師給我們驗證一下:

看到了吧,有call、length等這些屬性。

那怎么還有hasOwnProperty呢?——那是Function.prototype繼承自Object.prototype的方法。有疑問可以看看上一節講instanceof時候那個大圖,看看Function.prototype.__proto__是否指向Object.prototype。

 

原型、原型鏈,大家都明白了嗎?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91精品国产综合久久婷婷香 | 国产精品成人久久 | 99精品国产一区二区三区 | 久草在线最新 | 国产91中文字幕 | 久久国产乱子伦精品 | 久久色播| 国产精品资源手机在线播放 | 国产一级淫片a级aaa | 99re66热这里只有精品8 | 色屁屁xxxxⅹ在线视频 | 羞羞视频免费观看网站 | www.xxx视频| 久久av一区二区 | 欧美一级毛片特黄黄 | 欧美日韩亚州综合 | 成人免费一区二区三区 | 日韩不卡一区二区 | 92看片淫黄大片一级 | 黄色片在线观看网站 | 美女福利视频国产 | 99视频观看 | 看av网址 | 久久福利在线 | 99麻豆久久久国产精品免费 | 亚洲视频在线观看免费 | 欧美一区二区黄 | 久草在线看片 | 免费一级片网站 | 久久久一区二区三区精品 | 久久精品视频69 | 欧美久久久一区二区三区 | 欧美精品在线视频观看 | 国产一区免费观看 | 91精品观看91久久久久久国产 | 色呦呦一区二区三区 | 日本视频网| 欧美片a| 国产九色在线观看 | 粉嫩粉嫩一区二区三区在线播放 | 久久精品视频亚洲 |