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

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

JavaScript原型詳解

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

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

JavaScript原型詳解

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

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

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

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

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

2.2 原型概念

相關的概念其實我研究了好幾天,除開原型概念本身,與之聯系的對象的產生,構造函數,proto,prototype的區別,為什么對象沒有prototype這個指向原型的屬性,而是使用proto來指向原型?

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

2.3 對象創建

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

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

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

2.4 查看對象原型

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

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

無論對象是如何創建的,默認原型都是Object,在這里需要提及的比較特殊的一點就是,通過構造函數來創建對象,函數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 () {}

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

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

2.5 原型的用法

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

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構造函數,可能需要糾正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"

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

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

2.6 原型鏈

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

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

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲福利一区| 亚洲精品高潮| 天海翼精品一区二区三区| 中文字幕一区二区三区四区久久| 欧美日韩亚洲在线观看| 亚洲精品中文字幕乱码| 蜜桃91丨九色丨蝌蚪91桃色| 四虎在线精品| 国产精品亚洲综合久久| 欧美国产不卡| 久久精品人人| 日韩久久视频| 视频一区二区三区入口| 亚洲色图国产| 国产不卡人人| 蜜臀av一区二区在线免费观看| 美女视频黄 久久| 婷婷丁香综合| 久久精品91| 国产欧美69| 亚洲日韩视频| 亚洲精品影视| 六月天综合网| 亚洲手机视频| 欧美久久天堂| 久久久久久婷| 日韩欧美激情电影| 中国女人久久久| 欧美99久久| 亚洲精品一级二级| 欧美国产亚洲精品| 国产精品成人自拍| 日产欧产美韩系列久久99| 黄色成人91| 午夜国产精品视频免费体验区| 久久久久久夜| 捆绑调教日本一区二区三区| 麻豆精品国产91久久久久久| 亚洲视频综合| 国产亚洲精品精品国产亚洲综合| 日本欧美在线看| 不卡专区在线| 久久男人av| 日韩av一区二区在线影视| 免费在线成人网| 欧美精品羞羞答答| 久久婷婷国产| 色一区二区三区四区| 精品久久久中文字幕| 7777精品| 91亚洲精品视频在线观看 | 精品国产乱码久久久久久1区2匹| 97成人超碰| 国产欧美精品久久| 国产videos久久| 嫩草伊人久久精品少妇av杨幂| 国产精品久久久一区二区| 国产精品自在| 久久尤物视频| 国产日韩精品视频一区二区三区| 亚洲精品成a人ⅴ香蕉片| 国产精品亚洲一区二区在线观看| 蜜臀av一区二区在线免费观看| 久久久久国产一区二区| 日韩国产欧美一区二区| 麻豆91在线播放| 中文字幕高清在线播放| 色天使综合视频| 国产精品99免费看| 好看的av在线不卡观看| 神马午夜在线视频| 欧美aa国产视频| 亚洲aa在线| 美女久久久久久| 成人台湾亚洲精品一区二区 | 免费在线观看一区| 国产精品欧美大片| 都市激情国产精品| 国产亚洲综合精品| 国产欧美三级| 神马午夜在线视频| 免费成人在线观看| 欧美久久一区二区三区| 久久国产日韩欧美精品| 在线日韩欧美| 中文日韩在线| 国产精品久久久久久妇女| 在线一区av| 蜜桃av一区二区| 国产一区二区三区四区二区| 久久精品高清| 91午夜精品| 91久久久精品国产| 国产欧美高清| 女同性一区二区三区人了人一| 久久国产精品色av免费看| 精品视频一区二区三区在线观看| 黄色av一区| а√天堂8资源在线| 亚洲手机在线| 精品国产乱码久久久| 亚洲精品视频一二三区| 日韩欧美另类一区二区| 日韩福利视频导航| 欧美1区免费| 丁香六月综合| 麻豆精品久久久| 亚洲日韩中文字幕一区| 国产99久久久国产精品成人免费| 亚州av一区| 亚洲欧美久久| 99久久亚洲精品蜜臀| 欧美激情三区| 国产精品片aa在线观看| 午夜亚洲精品| 免费精品国产的网站免费观看| 国产精品videosex极品| 1000部精品久久久久久久久| 一区二区三区午夜视频| 久久精品影视| 亚洲电影有码| 色婷婷精品视频| 91精品啪在线观看国产18| 亚洲深夜视频| 久久国产日韩| 激情久久久久久| 国语精品一区| 日韩中出av| 久久国产乱子精品免费女| 亚洲欧美不卡| 日韩三区四区| 亚洲ww精品| 国产精品视频首页| 精品一区二区三区四区五区| 欧美黑人做爰爽爽爽| 久久久久黄色| 久久婷婷激情| 亚洲香蕉视频| 日韩国产在线观看一区| 国产欧美另类| 福利一区在线| 蜜桃一区二区三区| 国产女优一区| 清纯唯美亚洲综合一区| 日韩成人精品一区二区三区 | 免费看黄色91| 欧美精品三级在线| 成人在线观看免费视频| 伊人久久av| 亚洲精品影视| 久久亚洲精精品中文字幕| 久久久久久久久99精品大| 亚洲欧美日韩国产一区| 国产欧美高清视频在线| 日韩免费久久| 日韩福利在线观看| 国产亚洲一区二区手机在线观看| 久久国产精品久久久久久电车| 欧美日韩一区自拍| 久久免费大视频| 国产日韩欧美三级| 国产视频亚洲| 国产成人精品三级高清久久91| 中文在线不卡| 深夜视频一区二区| 国产精品porn| 9国产精品视频| 免费亚洲一区| 亚洲欧美日韩国产一区| 久久亚洲精品中文字幕| 免费国产亚洲视频| 婷婷激情综合| 日韩成人亚洲| 国产成人精选| 国产欧美一区二区三区精品观看| 99在线精品视频在线观看| 欧美日韩国产观看视频| 国产剧情一区二区在线观看| 蜜桃视频在线观看一区二区| 久久精品国产999大香线蕉| 亚洲欧美一区在线| 日本一区二区高清不卡| 日韩高清不卡一区二区| 视频一区二区不卡| 日韩av首页| 国产va免费精品观看精品视频| 欧美日韩一区二区三区不卡视频 | 亚洲精品自拍| 奶水喷射视频一区| 免费日韩av| 美女精品在线| 视频一区二区三区中文字幕| 9国产精品视频| 亚洲一区二区毛片| 久久午夜精品一区二区| 乱人伦精品视频在线观看| 亚洲一区免费| 亚洲欧洲午夜| 蜜桃av一区二区| 欧美日韩精品一区二区三区在线观看|