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

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

JavaScript原型詳解

瀏覽:29日期:2023-11-17 09:33:17
1,前言

下面是2008年Github創(chuàng)建以來,各種編程語言的排名情況

JavaScript原型詳解

其中JavaScript自2015年之后就盤踞第一名,成為github上被使用最多的語言,早期,JS的使用還主要集中于瀏覽器中,但是隨著node.js進軍服務器開發(fā)和React Native逐漸向移動端滲透,一個屬于JS的全棧時代就要來臨了。而且JS界還流傳一句名言:“所有能用JS開發(fā)的應用程序,最終都會用JS來開發(fā)”。我就問你怕不怕?

好了,說了這么多,我并不是想說JS為世界上最好的語言(顯然PHP才是,對吧?←_←),也不是覺得JS會替代誰,我只是覺得,JavaScript將會是一個大家(不止web端)都應該了解和學習的語言工具。

2,面對對象(OOP)2.1 實現(xiàn)思路

面對對象是大家都很熟悉的程序設計思想,是對真實世界的抽象,目前主要OOP語言用來實現(xiàn)面對對象的基礎是類,通過類的封裝,繼承來映射真實世界。包括Java,C#,甚至是python等都通過類的設計來實現(xiàn)面對對象。但是細想起來也會覺得有問題,因為真實世界其實沒有類這種概念,只有一個個不同的對象,真實世界中,繼承關(guān)系發(fā)生在對象和對象之間,而不是類。就比如孩子是對象,父母也是對象,孩子(對象)繼承自父母(對象)

JS也是面對對象的編程語言,只不過它實現(xiàn)面對對象的思路是基于原型(prototype),而不是類。這種思路也叫對象關(guān)聯(lián)(Object Link Other Object),即在對象上直接映射那種真實世界的關(guān)系(如繼承)。

2.2 原型概念

相關(guān)的概念其實我研究了好幾天,除開原型概念本身,與之聯(lián)系的對象的產(chǎn)生,構(gòu)造函數(shù),proto,prototype的區(qū)別,為什么對象沒有prototype這個指向原型的屬性,而是使用proto來指向原型?

好,我們先來談談原型這個概念。JS中一切皆對象,而每個對象都有一個原型(Object除外),這個原型,大概就像Java中的父類,所以,基本上你可以認為原型就是這個對象的父對象,即每一個對象(Object除外)內(nèi)部都保存了它自己的父對象,這個父對象就是原型。一般創(chuàng)建的對象如果沒有特別指定原型,那么它的原型就是Object(這就很類似Java中所有的類默認繼承自Object類)。

2.3 對象創(chuàng)建

在JS中,對象創(chuàng)建的方法有很多種,最常見的如下:

//第一種,手動創(chuàng)建var a={'name':'lala'}; //第二種,構(gòu)造函數(shù)function A(){ this.name='lala';}var a=new A();//第三種,class (ES6標準寫法)class A{ constructor(){super();this.name='lala'; }}var a=new A()//其實后面兩種方法本質(zhì)上是一種寫法

這三種寫法創(chuàng)建的對象的原型(父對象)都是Object,需要提到的是,ES6通過引入class ,extends等關(guān)鍵字,以一種語法糖的形式把構(gòu)造函數(shù)包裝成類的概念,更便于大家理解。是希望開發(fā)者不再花精力去關(guān)注原型以及原型鏈,也充分說明原型的設計意圖和類是一樣的。

2.4 查看對象原型

當對象被創(chuàng)建之后,查看它們的原型的方法不止一種,以前一般使用對象的proto屬性,ES6推出后,推薦用Object.getPrototypeOf()方法來獲取對象的原型

function A(){ this.name='lala';}var a=new A();console.log(a.__proto__) //輸出:Object {}//推薦使用這種方式獲取對象的原型console.log(Object.getPrototypeOf(a)) //輸出:Object {}

無論對象是如何創(chuàng)建的,默認原型都是Object,在這里需要提及的比較特殊的一點就是,通過構(gòu)造函數(shù)來創(chuàng)建對象,函數(shù)A本身也是一個對象,而A有兩個指向表示原型的屬性,分別是proto和prototype,而且兩個屬性并不相同

function A(){ this.name='lala';}var a=new A();console.log(A.prototype) //輸出:Object {}console.log(A.__proto__) //輸出:function () {}console.log(Object.getPrototypeOf(A))//輸出:function () {}

函數(shù)的的prototype屬性只有在當作構(gòu)造函數(shù)創(chuàng)建的時候,把自身的prototype屬性值賦給對象的原型。而實際上,作為函數(shù)本身,它的原型應該是function對象,然后function對象的原型才是Object。

總之,建議使用ES6推薦的查看原型和設置原型的方法。

2.5 原型的用法

其實原型和類的繼承的用法是一致的:當你想用某個對象的屬性時,將當前對象的原型指向該對象,你就擁有了該對象的使用權(quán)了。

function A(){ this.name='world ';}function B(){ this.bb="hello" }var a=new A();var b=new B();Object.setPrototypeOf(a,b);//將b設置為a的原型,此處有一個問題,即a的constructor也指向了B構(gòu)造函數(shù),可能需要糾正a.constructor=A;console.log(a.bb)//輸出 hello

(增補)

如果使用ES6來做的話則簡單許多,甚至不涉及到prototype這個屬性

class B{ constructor(){this.bb='hello' }}class A extends B{ constructor(){super()this.name='world' }}var a=new A();console.log(a.bb+" "+a.name);//輸出hello worldconsole.log(typeof(A))//輸出 "function"

怎么樣?是不是已經(jīng)完全看不到原型的影子了?活脫脫就是類繼承,但是你也看得到實際上類A 的類型是function,所以說,本質(zhì)上class在JS中是一種語法糖,JS繼承的本質(zhì)依然是原型,不過,ES6引入class,extends 來掩蓋原型的概念也是一個很友好的舉動,對于長期學習那些類繼承為基礎的面對對象編程語言的程序員而言。

我的建議是,盡可能理解原型,盡可能用class這種語法糖。

2.6 原型鏈

這個概念其實也變得比較簡單,可以類比類的繼承鏈條,即每個對象的原型往上追溯,一直到Object為止,這組成了一個鏈條,將其中的對象串聯(lián)起來,當查找當前對象的屬性時,如果沒找到,就會沿著這個鏈條去查找,一直到Object,如果還沒發(fā)現(xiàn),就會報undefined。那么也就意味著你的原型鏈不能太長,否則會出現(xiàn)效率問題。

3,總結(jié)對于原型概念的理解類比類的繼承,對象的原型可以理解為對象的父對象原型的運用盡可能使用ES6的標準,使用class,extends,Object.getPrototype(),Object.setPrototype()等等需要注意的點原型繼承鏈條不要太長指定原型時,注意constructor也會改變。4,后記(增補)

還有人覺得我的分析很抽象,所以,我再總結(jié)一下,如果要一句話理解JS中的原型是什么,那就是,對象的原型就指的對象的父對象。每個對象都有父對象,父對象本身也有父對象(爺對象?)。而原型鏈呢,很像過去家譜的概念,可以從你往上追溯你父親,到爺爺,到太爺爺一直到頭,這就形成了一個鏈條,如果其中每個人都比作一個對象,那么這個鏈條就是原型鏈。

標簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
五月天久久网站| 美女久久精品| 涩涩av在线| 免费一二一二在线视频| 亚洲国内精品| 免费观看在线色综合| 日韩激情av在线| 国产一区一一区高清不卡| 国产成人a视频高清在线观看| 特黄毛片在线观看| 日韩午夜免费| 欧美日韩一区二区三区四区在线观看| 在线一区二区三区视频| 国产精品一区二区精品视频观看| 伊伊综合在线| 视频一区视频二区在线观看| 国产探花一区| 99久久精品网| **爰片久久毛片| 91精品韩国| 亚洲ab电影| 美女久久99| 日韩一级网站| 国产高清亚洲| 99视频一区| 久久久久久亚洲精品美女| 欧美日韩一区二区综合| 中文在线日韩| 色在线视频观看| 亚州欧美在线| 久久精品二区三区| 国产美女久久| 国产一级久久| 国产精品久久观看| 日韩一区精品| 亚洲视频综合| 麻豆久久一区二区| 先锋亚洲精品| 极品av在线| 欧美久久久网站| 夜夜嗨一区二区| 中文字幕人成乱码在线观看| 一区二区高清| 久久九九精品| 精品黄色一级片| 日韩欧美美女在线观看| 成人羞羞在线观看网站| 国产精品手机在线播放| 久久国产精品99国产| 精品久久精品| 欧美日韩在线精品一区二区三区激情综合| 蜜桃成人av| 成人福利av| 国产精品1luya在线播放| 国产美女精品| 女生影院久久| 欧美激情麻豆| 一区二区三区四区在线观看国产日韩| 激情综合婷婷| 国产日韩欧美一区二区三区| 玖玖精品视频| 亚洲成人三区| 久久精品一区二区不卡| 国产精品xx| 精品视频一二| 国产精品蜜月aⅴ在线| 亚洲免费福利一区| 香蕉久久久久久久av网站| 久久视频国产| 欧美gv在线| 精品国产不卡| 日韩高清在线不卡| 亚洲视频二区| 最新日韩av| 欧美精品一二| 一区二区三区视频免费观看| 在线天堂中文资源最新版| 麻豆久久久久久| 国产精品地址| 蜜桃精品视频| 麻豆高清免费国产一区| 国产精品v亚洲精品v日韩精品| 日本伊人午夜精品| 中文不卡在线| 日韩中文字幕视频网| 中文字幕亚洲精品乱码| 中文字幕成人| 97se亚洲| 日韩成人午夜精品| 青青国产91久久久久久| 奇米狠狠一区二区三区| 日本国产亚洲| 欧美日本不卡高清| 久久国际精品| 国产极品久久久久久久久波多结野| 91精品在线免费视频| 日本视频一区二区| 日本va欧美va精品发布| 久久国产精品免费一区二区三区 | 丝袜a∨在线一区二区三区不卡| 极品日韩av| 欧美午夜精彩| 乱人伦精品视频在线观看| 免费观看在线综合色| 亚洲区欧美区| 国产精品欧美大片| 91亚洲国产成人久久精品| 成人在线网站| 国产手机视频一区二区 | 视频一区中文字幕| 日韩国产精品久久久久久亚洲| 欧美一区激情| 精品国产亚洲一区二区三区大结局| 国产精品久久久久久久久久10秀| 成人亚洲一区| 亚洲精品91| 日本成人在线视频网站| 精品久久免费| 欧美日韩精品一本二本三本| 亚洲精一区二区三区| 欧美激情三区| 亚洲性图久久| 日韩美女国产精品| 91麻豆国产自产在线观看亚洲| 激情久久久久久| 日本亚洲欧洲无免费码在线| 老牛国内精品亚洲成av人片 | 奇米狠狠一区二区三区| 精品亚洲a∨| 欧美日韩国产综合网| 日本一区免费网站| 手机在线电影一区| 首页欧美精品中文字幕| 国产精品66| 午夜久久影院| 国产精品网在线观看| 久久婷婷av| 欧美私人啪啪vps| 久久中文字幕二区| 国产日韩欧美一区二区三区在线观看 | 欧美啪啪一区| 久久久精品五月天| 日本午夜精品久久久| 欧美日韩精品免费观看视欧美高清免费大片| 丝袜国产日韩另类美女| 久久精品网址| 最近国产精品视频| 国产va在线视频| 影音先锋久久精品| 日韩欧美视频专区| 青草国产精品久久久久久| 999国产精品视频| 国产精品视频一区二区三区四蜜臂| 国内精品福利| 久久精品99国产精品| 99久久久久| 欧美1区2区3| 亚洲综合色婷婷在线观看| 午夜av不卡| 国产精品毛片视频| 亚洲人成网77777色在线播放| 午夜精品成人av| 国产欧美日韩一区二区三区四区| 国产二区精品| 综合日韩av| 久久99精品久久久久久园产越南 | 婷婷综合成人| 国产亚洲在线观看| 成人美女视频| 国产精品啊啊啊| 亚洲专区视频| 亚洲成人精选| 国产精品最新| 中文字幕日韩欧美精品高清在线| 日本精品不卡| 久久男人av| 国产乱人伦精品一区| 野花国产精品入口| 日韩一区电影| 精品中文在线| 国产精品伊人| 天堂久久一区| 日韩专区欧美专区| 久久天堂av| 在线手机中文字幕| 国产一区三区在线播放| 国产精品密蕾丝视频下载| 亚洲主播在线| 欧美在线资源| 亚洲国产专区校园欧美| 蜜桃av.网站在线观看| 青青草精品视频| 午夜久久av | 精品伊人久久| 欧美日韩一区二区国产| 日本不卡高清| 日本在线不卡视频一二三区| 色综合视频一区二区三区日韩 | 9色精品在线| 尤物精品在线|