中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

淺談JavaScript對(duì)象與繼承
來源:易賢網(wǎng) 閱讀:911 次 日期:2016-07-29 14:03:20
溫馨提示:易賢網(wǎng)小編為您整理了“淺談JavaScript對(duì)象與繼承”,方便廣大網(wǎng)友查閱!

JavaScript是我在C語言之后接觸的第二門編程語言,大一暑假的時(shí)候在圖書館找了一本中國人寫的JavaScript程序設(shè)計(jì)來看。那個(gè)時(shí)候在編程方面幾乎還是小白,再加上那本書根本沒有提JavaScript的編程機(jī)制,又有一些誤導(dǎo)性的話,一直以來對(duì)JavaScript有很深的誤解,認(rèn)為JavaScript只是一門在瀏覽器上運(yùn)行的面向?qū)ο笳Z言,值此文來寫下JavaScript當(dāng)中很具有迷惑性和容易誤解的地方。當(dāng)然限于作者水平有限,也沒有什么開發(fā)經(jīng)驗(yàn),所以難免有疏漏之處,還望批評(píng)指正。

JavaScript的對(duì)象

對(duì)象是什么

JavaScript代碼當(dāng)中隨處可見new關(guān)鍵字,很容易讓人產(chǎn)生誤解,認(rèn)為JavaScript是Java一樣是基于類繼承的語言。但是事實(shí)并非如此,JavaScript當(dāng)中并沒有類,那JavaScript的對(duì)象不是類那又是什么呢?某種意義上說,JavaScript的對(duì)象就是Python當(dāng)中的字典(哈希表),其實(shí)也就是類似這樣的鍵值對(duì):

me={

  "fisrtName" : "seek",

  "lastName" : "truth" ,

  "getName" : function(){

    return this.firstName+this.lastName; //this相當(dāng)于指向這個(gè)對(duì)象的指針

  }

}

這是一個(gè)比較有誤解性的地方,初次看到時(shí)候覺得有點(diǎn)無法理解,但仔細(xì)用一用還是覺得合理,我們既可以像Python一樣用[]運(yùn)算符來獲取元素,也可以用.操作符來獲取元素:

me.firstName // => seek

me["lastName"] //=> truth

me.getName() // => seektruth

new運(yùn)算符

既然JavaScript當(dāng)中是沒有類的,那么new運(yùn)算符又是在干什么呢?這是JavaScript設(shè)計(jì)的最讓人誤解的地方之一。JavaScript是一門函數(shù)式編程語言,JavaScript當(dāng)中函數(shù)是一等公民,JavaScript當(dāng)中函數(shù)也是對(duì)象,函數(shù)對(duì)象在被創(chuàng)建的時(shí)候會(huì)被添加調(diào)用屬性,比較坑的是JavaScript函數(shù)有兩種調(diào)用方式,一種是加了new關(guān)鍵字的調(diào)用,一種是沒有new關(guān)鍵字的調(diào)用,前者會(huì)返回一個(gè)對(duì)象,后者會(huì)返回return語句當(dāng)中的內(nèi)容。考慮下面的一段函數(shù):

function Obj(name){

  this.name=name;

  return name;

}

如果我們用new運(yùn)算符來調(diào)用:

obj = new Obj("seektruth") //obj會(huì)是一個(gè)對(duì)象:{"name": "seektruth"}

如果我們直接調(diào)用:

obj = Obj("seektruth") //obj會(huì)是一個(gè)字符串:"seektruth"

確實(shí)設(shè)計(jì)的挺坑的,我們?cè)谡{(diào)用的時(shí)候需要分清楚是否需要使用new,一般來說需要用new關(guān)鍵字來調(diào)用的函數(shù)會(huì)采用大寫開頭。

還有更坑的是如果返回的返回值是一個(gè)對(duì)象:

function Obj(name){

  this.name=name;

  return {};

}

這樣無論我們是否用new運(yùn)算符來調(diào)用都會(huì)返回return語句里的值:

new Obj("seektruth") //=> {}

Obj("seektruth") //=> {}

設(shè)計(jì)的是什么鬼......

對(duì)象繼承

原型

前面已經(jīng)說到過JavaScript當(dāng)中是沒有類的,那JavaScript又是怎么來實(shí)現(xiàn)繼承的呢?答案是通過原型鏈。在JavaScript當(dāng)中,每個(gè)對(duì)象都會(huì)有一個(gè)原型,在創(chuàng)建對(duì)象的時(shí)候,如果不加說明的話,對(duì)象繼承的原型是Object.prototype,函數(shù)對(duì)象會(huì)繼承Function.prototype(Function.prototype繼承Object.prototype):

Object.prototype // => {}

Function.prototype // => [Function]

我們可以通過對(duì)象的__proto__熟悉來查看對(duì)象的原型:

a={}

a.__proto__ // => {}

JavaScript通過指定對(duì)象的原型來實(shí)現(xiàn)繼承,指定對(duì)象的原型主要有三種方式,一是在構(gòu)造函數(shù)當(dāng)中指明原型,二是直接修改對(duì)象的__proto__屬性,三是利用Object.create函數(shù),下面我們依次來看一看

在構(gòu)造函數(shù)當(dāng)中指定原型

我們可以在構(gòu)造函數(shù)當(dāng)中指定對(duì)象的原型:

me={

  "firstName" : "seek",

  "lastName" : "truth" ,

  "getName" : function(){

    return this.firstName+this.lastName; //this相當(dāng)于指向這個(gè)對(duì)象的指針

  }

}

function Obj(name){

  this.firstName = name;

  this.__proto__ = me; //指定原型為me對(duì)象

}

指定了原型之后,我們新建了對(duì)象之后就可以訪問原型的屬性:

obj = new Obj("foo"); // => { firstName: 'foo' }

obj.firstName // => foo

obj.lastName // => truth

obj.getName() // => "footruth"

當(dāng)訪問一個(gè)對(duì)象的時(shí)候,首先會(huì)嘗試在改對(duì)象當(dāng)中尋找該屬性,如果沒有就回到原型當(dāng)中尋找,直到Object.prototype。如果我們?cè)谛碌膶?duì)象當(dāng)中重寫了原型當(dāng)中的屬性(方法),那么實(shí)際使用的時(shí)候我們新寫的屬性(方法)會(huì)覆蓋掉原型當(dāng)中的定義,這有點(diǎn)像基于類的語言的函數(shù)重載。

注意如果原型me對(duì)象的lastname屬性有改變,因?yàn)閛bj對(duì)象是在原型當(dāng)中尋找屬性,那么這個(gè)obj對(duì)象的lastname屬性也會(huì)改變:

me.lastName = "me"

obj.lastName // => "me"

obj.getName() // => "foome"

直接改變對(duì)象的原型

我們也可以直接指定(改變)對(duì)象的原型:

obj2 = {}

obj2.__proto__ = me

obj2.firstName // => seek

obj2.lastName // => "me"

obj2.getName() // => "seekme"

使用Object.create函數(shù)

盡管說前兩種方法可以解決問題,但是這兩種寫法并不優(yōu)雅,因?yàn)镴avaScript并不是基于類的語言,第一寫法很容易給人以誤解,JavaScript語言精粹的作者Crockford認(rèn)為new就不應(yīng)該出現(xiàn)在JavaScript語言當(dāng)中,而推薦使用Object.create函數(shù)來基于原型來創(chuàng)建對(duì)象。Object.create函數(shù)的用法很簡單:

obj3 = Object.create(me) // 以me為原型創(chuàng)建新的對(duì)象

obj3.firstName // => seek

obj3.lastName // => "me"

obj3.getName() // => "seekme"

obj3 = Object.create(me) 與obj2 = {};obj2.proto = me是等價(jià)的,但是前一種寫法更優(yōu)雅也更易于理解。

總結(jié)

JavaScript作為一門基于原型的,函數(shù)式的編程語言在設(shè)計(jì)上有很多優(yōu)雅與強(qiáng)大之處,但同時(shí)又有很多糟粕和坑,正式如此,JavaScript也是被誤解最多語言。學(xué)習(xí)了JavaScript的對(duì)象繼承機(jī)制,感覺自己的水平還是大有長進(jìn)的。

以上這篇淺談JavaScript對(duì)象與繼承就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:淺談JavaScript對(duì)象與繼承
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
午夜精品久久久久久99热软件| 亚洲黄色精品| 亚洲人成人一区二区在线观看| 国产日韩欧美精品一区| 一区二区三区在线高清| 国产精品久久久久久久久久妞妞| 久久精品一区二区三区四区| 免费欧美日韩| 国产精品一区二区久久久久| 一本一本久久| 午夜精品婷婷| 亚洲区第一页| 欧美日韩亚洲在线| 麻豆国产精品777777在线| 国内精品视频在线播放| 国产精品久久久久91| 9l视频自拍蝌蚪9l视频成人| 亚洲精品乱码久久久久久| 亚洲欧美日韩在线观看a三区| 久久亚洲私人国产精品va媚药| 国产精品久久久久国产a级| 国产又爽又黄的激情精品视频| 亚洲精品久久久蜜桃| 久久综合图片| 好看不卡的中文字幕| 亚洲男女毛片无遮挡| 欧美激情亚洲一区| 亚洲国产成人av| 免费观看不卡av| 国内外成人免费激情在线视频网站| 亚洲免费影院| 国产精品自拍三区| 新狼窝色av性久久久久久| 国产精品日韩专区| 亚洲欧美电影在线观看| 国产精品乱人伦一区二区| 9色精品在线| 欧美日韩在线观看视频| 9色国产精品| 国产精品夫妻自拍| 亚洲一二三四久久| 国产精品久久99| 亚洲女同精品视频| 国产亚洲激情| 免费久久久一本精品久久区| 亚洲国产日韩欧美| 欧美啪啪一区| 亚洲欧美乱综合| 国内精品一区二区| 男男成人高潮片免费网站| 亚洲三级视频| 欧美性大战久久久久| 亚洲欧美日韩综合| 一区视频在线播放| 欧美日韩亚洲三区| 欧美制服丝袜| 亚洲国产美女精品久久久久∴| 欧美国产日韩精品| 午夜激情久久久| 在线看片欧美| 国产精品久久久久久久久婷婷| 欧美一区二区在线观看| 亚洲高清免费视频| 欧美日韩中文在线| 久久露脸国产精品| 亚洲图片激情小说| 影音先锋中文字幕一区二区| 欧美日韩 国产精品| 欧美一区成人| avtt综合网| 在线观看一区视频| 国产精品久久看| 欧美不卡视频一区| 性伦欧美刺激片在线观看| 最近看过的日韩成人| 国产精品―色哟哟| 欧美日本高清| 久久久久网址| 欧美一级久久久| 中文网丁香综合网| 亚洲精品在线观| 尤妮丝一区二区裸体视频| 欧美日韩免费观看一区三区| 久久久久看片| 先锋影音久久久| 亚洲制服欧美中文字幕中文字幕| 亚洲国产高清在线观看视频| 国产欧美日韩精品一区| 欧美色大人视频| 欧美日韩1区| 欧美国产激情二区三区| 久久国产一区二区| 欧美一级淫片播放口| 亚洲一区二区三| 一区二区三区视频在线观看| 亚洲精品乱码| 日韩亚洲欧美在线观看| 亚洲国产视频一区| 最近中文字幕日韩精品| 在线观看国产成人av片| 国内精品久久国产| 国内一区二区在线视频观看| 国产欧美婷婷中文| 国产亚洲一区二区三区在线播放| 国产精品丝袜久久久久久app| 欧美三级不卡| 国产精品久久久久影院亚瑟| 国产精品久久久久婷婷| 国产精品成人va在线观看| 欧美日韩一区二| 欧美性猛片xxxx免费看久爱| 国产精品yjizz| 国产欧美三级| 狠狠入ady亚洲精品经典电影| 国产一区二区三区在线播放免费观看| 国产一区二区精品丝袜| 一区免费观看视频| 亚洲另类视频| 中文精品一区二区三区| 亚洲欧美久久久久一区二区三区| 午夜精品久久| 久久综合九色| 欧美日韩视频专区在线播放| 国产精品看片你懂得| 国内精品一区二区三区| 亚洲激情在线激情| 亚洲影院色无极综合| 久久精品视频在线免费观看| 欧美成人免费小视频| 国产精品高潮呻吟久久| 韩日精品视频| 99re成人精品视频| 欧美在线观看一区| 久久国产精品一区二区| 亚洲欧美国产制服动漫| 美女图片一区二区| 一区二区三区在线观看欧美 | 国产欧美一区二区三区另类精品| 欧美激情网友自拍| 久久精品欧美日韩| 国产亚洲二区| 欧美午夜不卡视频| 欧美有码在线观看视频| 欧美体内she精视频| 欧美一级久久久久久久大片| 亚洲国产一区二区视频| 国产一区激情| 国产精品久久一区二区三区| 欧美日韩精品在线观看| 国产精品久久久久久久久果冻传媒| 欧美精品日日鲁夜夜添| 久久精品国产视频| 亚洲区一区二区三区| 伊人久久亚洲美女图片| 一区二区三区精品久久久| 亚洲一区二区三区乱码aⅴ| 老司机精品福利视频| 久久女同互慰一区二区三区| 欧美二区视频| 欧美视频一二三区| 国产亚洲女人久久久久毛片| 伊人男人综合视频网| 99精品视频免费| 久久亚洲捆绑美女| 国产精品视频免费一区| 最新国产精品拍自在线播放| 欧美在线免费观看| 欧美片在线观看| 在线欧美三区| 久久天天狠狠| 国产欧美在线观看一区| 亚洲一区国产一区| 欧美美女视频| 在线看国产一区| 亚洲欧美在线另类| 欧美精品免费在线观看| 伊人色综合久久天天五月婷| 欧美中文字幕视频在线观看| 欧美日韩在线免费视频| 99视频一区二区| 欧美日本高清一区| 亚洲第一二三四五区| 久久综合色8888| 狠狠色2019综合网| 久久不射中文字幕| 国产一区二区三区免费不卡| 亚洲伦理精品| 欧美丰满少妇xxxbbb| 亚洲国产日韩欧美| 久久米奇亚洲| 在线不卡a资源高清| 久久av二区| 国产亚洲福利| 久久九九国产精品怡红院| 国产精品一页| 亚洲欧美中文日韩在线| 好吊色欧美一区二区三区四区| 免费观看一级特黄欧美大片| 亚洲国产欧美一区二区三区丁香婷| 免播放器亚洲一区|