成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

深入了解JavaScript中的構(gòu)造器

深入了解JavaScript中的構(gòu)造器

對構(gòu)造函數(shù)有很好的理解是你掌握J(rèn)avaScript這門語言的重點(diǎn)。我們都知道JavaScript不像其他語言,它沒有class關(guān)鍵字,但是它有跟function非常相似的構(gòu)造函數(shù)。這篇文章我們一起來詳細(xì)地了解JavaScript構(gòu)造函數(shù)如何構(gòu)造對象。

構(gòu)造函數(shù)跟普通函數(shù)非常相似,但是我們通過new關(guān)鍵字來使用它們。主要有兩種類型的構(gòu)造函數(shù),native構(gòu)造函數(shù)(Array,Object)它們可以在執(zhí)行環(huán)境中自動生成,還有自定義的構(gòu)造函數(shù),你可以定義自己的方法和屬性。

當(dāng)你想要創(chuàng)建很多相似的對象(擁有相同的屬性和方法)的時(shí)候,使用構(gòu)造函數(shù)是非常有效的。大部分程序員都遵循公約,使用大寫字母開頭來將構(gòu)造函數(shù)和普通函數(shù)區(qū)分開。看看下面的代碼。

function Book() {      // unfinished code }  var myBook = new Book();

最后一行代碼創(chuàng)建了一個(gè)Book對象,并把它賦值給變量;這樣完成之后,即使Book構(gòu)造器沒有做任何操作,myBook也是Book實(shí)例。正如你看到的,除了首字母大寫和使用new關(guān)鍵字之外,構(gòu)造函數(shù)和普通函數(shù)并沒有什么區(qū)別。

判斷實(shí)例的類型

判斷某個(gè)對象是否為某種實(shí)例,我們可以使用instanceof操作符:

myBook instanceof Book    // => true myBook instanceof String  // => false

注意:如果右邊不是一個(gè)函數(shù)的實(shí)例,那么將會報(bào)錯(cuò):

myBook instanceof {}; // => TypeError: invalid 'instanceof' operand ({})

另一種方法是使用constructor屬性,所有對象實(shí)例都有一個(gè)constructor屬性,這個(gè)屬性指向創(chuàng)建它的構(gòu)造函數(shù)。

myBook.constructor == Book;   // => true

就像myBook的constructor指向Book一樣。 所有對象都從它們的原型上繼承了constructor這個(gè)屬性:

var s = new String("text"); s.constructor === String;      // => true "text".constructor === String; // => true var o = new Object(); o.constructor === Object;      // => true var o = {}; o.constructor === Object;      // => true var a = new Array(); a.constructor === Array;       // => true [].constructor === Array;      // => true

盡管使用constructor可以用來檢測實(shí)例類型,但是建議還是使用instanceof方法。因?yàn)閏onstructor屬性是可以被重寫的..用起來不太靠譜。

自定義構(gòu)造函數(shù)

構(gòu)造函數(shù)就像餅干印模。同一印模制作出來的,都是同一個(gè)diao樣(男人沒一個(gè)好東西也是這個(gè)道理)。

function Book(name, year) {     this.name = name;     this.year = '(' + year + ')'; }

Book構(gòu)造器需要兩個(gè)參數(shù),當(dāng)使用new關(guān)鍵字構(gòu)造對象時(shí),會把兩個(gè)形參傳給Book對象的name 和 year。

var firstBook = new Book("Pro AngularJS", 2014); var secondBook = new Book("Secrets Of The JavaScript Ninja", 2013);  var thirdBook = new Book("JavaScript Patterns", 2010);  console.log(firstBook.name, firstBook.year);            console.log(secondBook.name, secondBook.year);            console.log(thirdBook.name, thirdBook.year);

深入了解JavaScript中的構(gòu)造器

如你所見,我們可以通過傳不同參數(shù),快速創(chuàng)建另一本書。JavaScript的Array(),Date()也是這個(gè)道理。

Object.defineProperty 方法

Object.defineProperty 方法可以在構(gòu)造器中被使用來配置屬性。

function Book(name) {      Object.defineProperty(this, "name", {          get: function() {              return "Book: " + name;                },                 set: function(newName) {                         name = newName;                 },                        configurable: false          });  } var myBook = new Book("Single Page Web Applications"); console.log(myBook.name);    // => Book: Single Page Web Applications // we cannot delete the name property because "configurable" is set to false delete myBook.name;     console.log(myBook.name);    // => Book: Single Page Web Applications // but we can change the value of the name property myBook.name = "Testable JavaScript"; console.log(myBook.name);    // => Book: Testable JavaScript

上面的代碼中是調(diào)用了祖先的方法。它提供了getter和setter接口。getter方法負(fù)責(zé)返回封裝的值,setter方法接受參數(shù),并把值賦給屬性。當(dāng)我們在某個(gè)屬性上操作存取時(shí),調(diào)用的就是這兩個(gè)方法。通過配置configurable,我們可以設(shè)置該值能否被刪除。

對象字面量表示法是首選的構(gòu)造函數(shù)

JavaScript語言九種內(nèi)建的構(gòu)造器:Object(), Array(), String(), Number(), Boolean(), Date(), Function(), Error() 以及 RegExp()。當(dāng)我們需要創(chuàng)建這些值的時(shí)候,我們可以自由選擇使用字面量或者構(gòu)造器。但是相同情況下,字面量對象不僅易讀,而且運(yùn)行速度更快,因?yàn)樗麄兛梢栽诮馕龅臅r(shí)候被優(yōu)化。所以當(dāng)你需要使用簡單對象的時(shí)候就使用字面量吧。

// a number object // numbers have a toFixed() method var obj = new Object(5); obj.toFixed(2);     // => 5.00 // we can achieve the same result using literals var num = 5; num.toFixed(2);     // => 5.00 // a string object // strings have a slice() method  var obj = new String("text"); obj.slice(0,2);     // => "te" // same as above var string = "text"; string.slice(0,2);  // => "te"

使用new關(guān)鍵字是必不可少的

記得使用構(gòu)造器的時(shí)候要用new關(guān)鍵字,如果你不小心忘記了,那么構(gòu)造器中的this指向的是global對象(瀏覽器中默認(rèn)為window)。

function Book(name, year) {     console.log(this);     this.name = name;     this.year = year; } var myBook = Book("js book", 2014);   console.log(myBook instanceof Book);   console.log(window.name, window.year); var myBook = new Book("js book", 2014);   console.log(myBook instanceof Book);   console.log(myBook.name, myBook.year);

上面的代碼運(yùn)行結(jié)果如下所示:

深入了解JavaScript中的構(gòu)造器

如果是在嚴(yán)格模式下,上面的代碼將會拋出錯(cuò)誤,因?yàn)閲?yán)格模式不允許我們不使用new關(guān)鍵字調(diào)用構(gòu)造器。

適用范圍更高的構(gòu)造器

為了解決可能會忘記使用new關(guān)鍵字的風(fēng)險(xiǎn),我們可以通過判斷this的值創(chuàng)建適用范圍更高的構(gòu)造器。

function Book(name) {      if (!(this instanceof Book)) {          // the constructor was called without "new".         return new Book(name);     }  }

加上這段代碼之后,我們就可以‘肆無忌憚’地使用構(gòu)造器了。

function Book(name, year) {      if (!(this instanceof Book)) {          return new Book(name, year);     }     this.name = name;     this.year = year; } var person1 = new Book("js book", 2014); var person2 = Book("js book", 2014); console.log(person1 instanceof Book);    // => true console.log(person2 instanceof Book);    // => true

很多內(nèi)建的構(gòu)造器都是這么做的。通過判斷this是否為當(dāng)前類型。如果程序員忘記加new關(guān)鍵字,那么我們就返回一個(gè)通過new出來的對象。

結(jié)論

JavaScript沒有類這種說法(但是它可以使面向?qū)ο蟮模詫τ诹?xí)慣了使用類的程序員來說是種困惑。當(dāng)然JavaScript的構(gòu)造函數(shù)跟普通函數(shù)沒什么區(qū)別,只是通過new關(guān)鍵字生成出來而已。如果我們需要”印餅干”的話,它就非常有用了。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久综合给久久狠狠97色| 麻豆产精国品一二三产区区| 免费A级毛片在线播放| 夜夜澡天天碰人人爱AV| 爆乳2把你榨干哦在线观看| 国产肉体XXXX裸体137大胆| 欧美乱强伦XXXXX高潮| 小受叫床高潮娇喘嗯啊MP3| 无码无套少妇毛多18P| 97久久精品无码一区二区天美| 国产深夜男女无套内射| 秋霞免费理论片在线观看| 亚洲欧洲日产国码AⅤ| 成人无码区免费AⅤ片WWW软件| TPU色母和PA6色母的区别| 狠狠无码人妻精品一区二区蜜桃| 浓精喷进老师黑色丝袜| 国产精品免费久久久久久蜜桃| 和教练在车里干了我三次| 国产无遮挡又黄又爽动态图 | 一本一道人人妻人人妻ΑV| 一本色道久久88—综合亚洲精品| 丰满人妻中文字幕| 免费无码又爽又刺激动态图 | 久拍国产在线观看| 无码中文字幕AV免费放DVD| 99热热久久这里只有精品68 | 我和大佬的365天| AAAA级少妇高潮大片在线观看| 精品久久久久久无码中文字幕一区 | 亚洲国产成人久久综合电影| 少妇无码AV无码一区| 久久免费的精品国产V∧| 小SAO货边洗澡边CAO你动漫| 成人区精品人妻人妻AV| 老头老太太GMBGMBGM| 亚洲乱码国产乱码精品精| 18禁黄网站禁片免费观看香港 | 曰韩少妇内射免费播放| 国产真实乱对白精彩| 日韩无码视频三区| 午夜影视免费观看2023| 波多野结衣AV大全| 国产精品国产三级国产AⅤ| 欧美最厉害的喷水VIDEOS | 人人玩人人添人人澡欧美| 中文字幕久久精品一区二区三区| 久久精品国产亚洲AV高清漫画 | 亚洲色成人网站WWW永久四虎| 国产精品成人一区无码| 人妻夜夜爽一区二区三区| 一二三四视频社区在线播放中国| 国内极度色诱视频网站| 玩弄CHANEL妇熟女| 一本一道人人妻人人妻ΑV| 果冻传媒剧国产剧在线看| 无码人妻精品一区二区蜜桃91| 公交车上拨开丁字裤进入| 日本精品少妇一区二区三区| CHINESE妓女野外直播| 国产真实夫妇交换视频| 翁止熄痒苏钥第9章的内容| 苍井空浴缸大战猛男120分钟| 欧美熟妇另类久久久久久多毛 | 国内精品视频一区二区三区八戒| 无码人妻精品一区二| 国产精华AV午夜在线观看| 视频在线一区二区三区| 国产97在线 | 亚洲| 久久婷婷激情综合色综合俺也去| 俄罗斯人与ZOOM人的区别| 人人做天天爱夜夜爽2020| ZOOM与人性ZOOM1区别| 欧美人交a欧美精品a∨一区| 97久久久久人妻精品区一| 美日欧激情AV大片免费观看 | 欧美人与动人物XXXX9296| 99久久国产综合精品女同图片| 蜜臂无码AV在线| 77777_亚洲午夜久久多人| 欧美三级一区二区| FREEHDⅩXXXXSEX| 人妻插B视频一区二区三区| 被陌生人在地铁揉到高潮| 日木AV无码专区亚洲AV毛片| 国产VA免费精品观看精品| 无码免费伦费影视在线观看 | 精产国品一二三产区区别在线观看 | 天堂在\/线中文在线资源| 丰满人妻妇伦又伦精品国产| 我半夜摸妺妺的奶C了她动漫| 国产精品无码午夜免费影院| 亚洲AV日韩AV高潮潮喷无码| 国产女人高潮抽搐喷水视频| 亚洲国产成人精品女人久久久| 精品亚洲成AV人在线观看| 在线成人精品国产区免费| 国产福利萌白酱精品TV一区| 午马视频影院1区2区3区4区| 国产无人区二卡三卡四卡不见星空 | 成人H视频在线观看| 婷婷国产三区四区| 国产亚洲美女精品久久久2020| 亚洲精品中文字幕乱码三区| 军人全身脱精光自慰| CHINESE老熟妇老女人HD| 人人爽人人澡人人人人妻| 成人欧美激情亚洲日韩蜜臀 | 成人精品免费视频在线观看 | 欧美黑人猛XXxXX内射| JULIA无码中文字幕一区| 少妇被黑人到高潮喷出白浆| 国产 国语对白 露脸| 午夜男女无遮挡啪拍视频| 久久精品国产2020观看福利| 337P日本欧洲亚洲大胆裸体艺| 日韩精品无码人妻一区二区三区 | 成人艳情一二三区| 亚州日本乱码一区二区三区| 久久精品人妻少妇一区二区| 18成禁人视频免费网站| 日本熟妇毛茸茸XXXX| 国产午夜福利100集发布| 一二三四在线观看免费高清视频 | 特级BBBBBBBBB视频| 国精产品一区二区三区糖心 | 野花香HD免费高清版6高清版 | 成人免费A级毛片无码片在线播放| 凸凹人妻人人澡人人添| 精品无码中文字幕不卡| 97夜夜澡人人爽人人喊中国片| 色悠久久久久综合欧美99| 99精品国产福久久久久久| 色综合天天综合网天天小说| 精精国产XXXX视频在线播放| 岳丰满多毛的大隂户| 日韩免费无码人妻波多野| 好男人资源在线观看好| 专干熟肥老妇人视频在线看| 色婷婷五月综合激情中文字幕| 精品国产成人A区在线观看| 99精品国产福利在线观看| 铜铜铜铜铜铜铜铜铜好多深 | 夫妻互换呻吟抽插小说| 亚洲日韩精品无码一区二区三区| 人妻大战黑人白浆狂泄| 国产毛多水多五月激情四射| 水蜜桃成视频人在线看| 中国少妇内射XXXHD| 精品熟人妻一区二区三区四区不卡 | 国产一区二区三区在线视頻| 2021影音先锋AⅤ资源男人网| 无码免费一区二区三区| 美女下部裸体张开腿视频| 抽搐一进一出再深一点| 亚洲午夜久久久久久久久电影网| 人妻AV无码系列一区二区三区| 国精产品一区一区三区有限| 真实的国产乱ⅩXXX66小说| 四川老妇女乱HD| 蜜臀AV午夜一区二区三区| 国产精品99久久久久久猫咪| 有人有在线观看的片吗WWW| 少妇人妻综合久久中文888| 久久久久久精品免费无码| 国产成人AV男人的天堂| 在线播放国产一区二区三区| 无码AV中文字幕出轨人妻 | 影音先锋女人AV鲁色资源网久久| 上司侵犯下属人妻中文字幕| 久久亚洲色WWW成人男男| 东北妓女激情普通话对白| 亚洲五月丁香综合视频| 四川丰满少妇A级毛片| Chinese辽宁人妻4p| 日本理论片和搜子同居的日子| 精品人妻伦一二三区久久| 草莓视频IOS下载| 伊人久久大香线蕉综合AV| 午夜亚洲WWW湿好爽| 年轻漂亮的人妻被公侵犯BD免费| 国产午夜性春猛交ⅩXXX| 被青梅竹马的学弟给锁定了林擎霄| 亚洲一区AV无码少妇电影 | 99RE6在线视频精品免费下载| 亚洲AV无码一区东京热不卡| 日本XXX色视频| 麻豆极品JK丝袜自慰喷水久久| 国产女人高潮抽搐喷水嗷嗷叫| WBBBB搡BBBB搡BBBB| 亚洲一区二区三区乱码AⅤ蜜桃女 亚洲一区二区三区乱码AⅤ蜜桃 | 亚洲资源AV无码日韩AV无码| 甜性涩爱在线播放| 人妻 清高 无码 中文字幕| 精品人妻av无码一区二区三区 | 被多个男人调教奶头玩奶头| 伊人久久无码大香线蕉综合| 亚洲AV素人乱码| WINDOWS乱码的乱码大全| 亚洲AV成人无码精品直播在线|