


版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、06|JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?06|JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?你好,我是winter。與其它的語(yǔ)言相比,JavaScript中的“對(duì)象”總是顯得不那么合群。一些新人在學(xué)習(xí)JavaScript面向?qū)ο髸r(shí),往往也會(huì)有疑惑:為什么JavaScript(直到ES6)有對(duì)象的概念,但是卻沒(méi)有像其他的語(yǔ)言那樣,有類(lèi)的概念呢; 為什么在JavaScript對(duì)象里可以自由添加屬性,而其他的語(yǔ)言卻不能呢?甚至,在一些爭(zhēng)論中,有人強(qiáng)調(diào):JavaScript并非“面向?qū)ο蟮恼Z(yǔ)言”,而是“基于對(duì)象的語(yǔ)言”。這個(gè)說(shuō)法一度流傳甚廣,而事實(shí)上,我至今遇到的持有這一說(shuō) 法的人中,
2、無(wú)一能夠回答“如何定義面向?qū)ο蠛突趯?duì)象”這個(gè)問(wèn)題。實(shí)際上,基于對(duì)象和面向?qū)ο髢蓚€(gè)形容詞都出現(xiàn)在了JavaScript標(biāo)準(zhǔn)的各個(gè)版本當(dāng)中。我們可以先看看JavaScript標(biāo)準(zhǔn)對(duì)基于對(duì)象的定義,這個(gè)定義的具體內(nèi)容是:“語(yǔ)言和宿主的基礎(chǔ)設(shè)施由對(duì)象來(lái)提供,并且JavaScript程序即是一系列互相通訊的 對(duì)象集合”。這里的意思根本不是表達(dá)弱化的面向?qū)ο蟮囊馑迹炊潜磉_(dá)對(duì)象對(duì)于語(yǔ)言的重要性。那么,在本篇文章中,我會(huì)嘗試讓你去理解面向?qū)ο蠛蚃avaScript中的面向?qū)ο缶烤故鞘裁础J裁词敲嫦驅(qū)ο??我們先?lái)說(shuō)說(shuō)什么是對(duì)象,因?yàn)榉g的對(duì)象編程的抽象思維有互通之處。,中文語(yǔ)境下我們很難理解“對(duì)象”的真正
3、含義。事實(shí)上,Object(對(duì)象)在英文中,是一切事物的總稱(chēng),這和面向中文的“對(duì)象”卻沒(méi)有這樣的普適性,我們?cè)趯W(xué)習(xí)編程的過(guò)程中,是把它當(dāng)作一個(gè)專(zhuān)業(yè)名詞來(lái)理解。但不論如何,我們應(yīng)該認(rèn)識(shí)到,對(duì)象并不是計(jì)算機(jī)領(lǐng)域憑空造出來(lái)的概念,它是順著人類(lèi)思維模式產(chǎn)生的一種抽象(于是面向?qū)ο缶幊桃脖徽J(rèn)為是:更接近 人類(lèi)思維模式的一種編程范式)。那么,我們先來(lái)看看在人類(lèi)思維模式下,對(duì)象究竟是什么。對(duì)象這一概念在人類(lèi)的幼兒期形成,這遠(yuǎn)遠(yuǎn)早于我們編程邏輯中常用的值、過(guò)程等概念。在幼年期,我們總是先認(rèn)識(shí)到某一個(gè)蘋(píng)果能吃(這里的某一個(gè)蘋(píng)果就是一個(gè)對(duì)象),繼而認(rèn)識(shí)到所有的蘋(píng)果都可以吃(這里的所有蘋(píng)果,就是一個(gè)類(lèi)),再到后來(lái)我
4、們才能三個(gè)蘋(píng)果和三個(gè)梨之間的,進(jìn)而產(chǎn)生數(shù)字“3”(值)的概念。在面向?qū)ο蠓治雠c設(shè)計(jì)這本書(shū)中,Grady Booch替我們做了總結(jié),他認(rèn)為,從人類(lèi)的認(rèn)知角度來(lái)說(shuō),對(duì)象應(yīng)該是下列事物之一:1. 一個(gè)可以觸摸或者可以看見(jiàn)的東西;file:/J/geektime/唯一更新/ebook/重學(xué)前端/06JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?.html2019/2/10 21:38:5306|JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?2. 人的智力可以理解的東西;3. 可以指導(dǎo)思考或行動(dòng)(進(jìn)行想象或施加動(dòng)作)的東西。有了對(duì)象的自然定義后,我們就可以描述編程語(yǔ)言中的對(duì)象了。在不同的編程語(yǔ)言中,
5、設(shè)計(jì)者也利用各種不同的語(yǔ)言特性來(lái)抽象描述對(duì)象,最為是使用“類(lèi)”的方式來(lái)描述對(duì)象,這誕生了諸如 C+、Java等流行的編程語(yǔ)言。的流派而 JavaScript 早年卻選擇了一個(gè)更為冷門(mén)的方式:原型(關(guān)于原型,我在下一篇文章會(huì)重點(diǎn)介紹,這里你留個(gè)印象就可以了)。這是我在前面說(shuō)它不合群的原因之一。然而很不幸,因?yàn)橐恍┕菊?,JavaScript推出之時(shí)受管理層之命被要求模仿Java,所以,JavaScript創(chuàng)始人Brendan Eich在“原型運(yùn)行時(shí)”的基礎(chǔ)上引入了new、this等語(yǔ)言特性,使之“看起來(lái)更像Java”。在 ES6 出現(xiàn)之前,大量的 JavaScript 程序員試圖在原型體系的基
6、礎(chǔ)上,把JavaScript變得更像是基于類(lèi)的編程,進(jìn)而產(chǎn)生了很多所謂的“框架”,比如PrototypeJS、Dojo。事實(shí)上,它們成為了某種JavaScript的古怪方言,甚至產(chǎn)生了一系列互不相容的社群,顯然這樣做的是遠(yuǎn)遠(yuǎn)小于損失的。如果我們從運(yùn)行時(shí)角度來(lái)談?wù)搶?duì)象,就是在討論JavaScript實(shí)際運(yùn)行中的模型,這是由于任何代碼執(zhí)行都必定繞不開(kāi)運(yùn)行時(shí)的對(duì)象模型。不過(guò),幸運(yùn)的是,從運(yùn)行時(shí)的角度看,可以不必受到這些“基于類(lèi)的設(shè)施”的困擾,這是因?yàn)槿魏握Z(yǔ)言運(yùn)行時(shí)類(lèi)的概念都是被弱化的。首先我們來(lái)了解一下JavaScript是如何設(shè)計(jì)對(duì)象模型的。JavaScript 對(duì)象的特征在我看來(lái),不論我們使用什
7、么樣的編程語(yǔ)言,我們都先應(yīng)該去理解對(duì)象的本質(zhì)特征(參考Grandy Booch面向?qū)ο蠓治雠c設(shè)計(jì))??偨Y(jié)來(lái)看,對(duì)象有如下幾個(gè)特點(diǎn)。對(duì)象具有唯一標(biāo)識(shí)性:即使完全相同的兩個(gè)對(duì)象,也并非同一個(gè)對(duì)象。對(duì)象有狀態(tài):對(duì)象具有狀態(tài),同一對(duì)象可能處于不同狀態(tài)之下。對(duì)象具有行為:即對(duì)象的狀態(tài),可能因?yàn)樗男袨楫a(chǎn)生變遷。我們先來(lái)看第一個(gè)特征,對(duì)象具有唯一標(biāo)識(shí)性。一般而言,各種語(yǔ)言的對(duì)象唯一標(biāo)識(shí)性都是用內(nèi)存地址來(lái)體現(xiàn)的, 對(duì)象具有唯一標(biāo)識(shí)的內(nèi)存地址,所以具有唯一的標(biāo)識(shí)。所以,JavaScript程序員都知道,任何不同的JavaScript對(duì)象其實(shí)是互不相等的,我們可以看下面的代碼,o1和o2初看是兩個(gè)一模一樣的對(duì)象
8、,但是打印出來(lái)的 結(jié)果卻是false。var o1 = a: 1 ;var o2 = a: 1 ; console.log(o1 = o2); / false關(guān)于對(duì)象的第二個(gè)和第三個(gè)特征“狀態(tài)和行為”,不同語(yǔ)言會(huì)使用不同的術(shù)語(yǔ)來(lái)抽象描述它們,比如C+中稱(chēng)它們?yōu)椤俺蓡T變量”和“成員函數(shù)”,Java中則稱(chēng)它們 為“屬性”和“方法”。在 JavaScript中,將狀態(tài)和行為統(tǒng)一抽象為“屬性”,考慮到 JavaScript 中將函數(shù)設(shè)計(jì)成一種特殊對(duì)象(關(guān)于這點(diǎn),我會(huì)在后面的文章中詳細(xì)講解,此處先不用file:/J/geektime/唯一更新/ebook/重學(xué)前端/06JavaScript對(duì)象:面向?qū)ο?/p>
9、還是基于對(duì)象?.html2019/2/10 21:38:5306|JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?細(xì)究),所以 JavaScript中的行為和狀態(tài)都能用屬性來(lái)抽象。下面這段代碼其實(shí)就展示了普通屬性和函數(shù)作為屬性的一個(gè)例子,其中o是對(duì)象,d是一個(gè)屬性,而函數(shù)f也是一個(gè)屬性,盡管寫(xiě)法不太相同,但是對(duì)JavaScript來(lái)說(shuō),d和f就是兩個(gè)普通屬性。var o = d: 1, f() console.log(this.d);所以,總結(jié)一句話來(lái)看,在JavaScript中,對(duì)象的狀態(tài)和行為其實(shí)都被抽象為了屬性。如果你用過(guò)Java,一定不要覺(jué)得奇怪,盡管設(shè)計(jì)思路有一定差別,但是 二者都很
10、好地表現(xiàn)了對(duì)象的基本特征:標(biāo)識(shí)性、狀態(tài)和行為。在實(shí)現(xiàn)了對(duì)象基本特征的基礎(chǔ)上, 我認(rèn)為,JavaScript中對(duì)象獨(dú)有的特色是:對(duì)象具有高度的動(dòng)態(tài)性,這是因?yàn)镴avaScript賦予了使用者在運(yùn)行時(shí)為對(duì)象添改狀態(tài)和行為的能力。我來(lái)舉個(gè)例子,比如,JavaScript 定會(huì)產(chǎn)生跟我一樣的感受。運(yùn)行時(shí)向?qū)ο筇砑訉傩?,這就跟絕大多數(shù)基于類(lèi)的、靜態(tài)的對(duì)象設(shè)計(jì)完全不同。如果你用過(guò)Java或者其它別的語(yǔ)言,肯下面這段代碼就展示了運(yùn)行時(shí)如何向一個(gè)對(duì)象添加屬性,一開(kāi)始我定義了一個(gè)對(duì)象o,定義完成之后,再添加它的屬性b,這樣操作是完全沒(méi)問(wèn)題的。var o = a: 1 ;o.b = 2;console.log(o
11、.a, o.b); /1 2為了提高抽象能力,JavaScript的屬性被設(shè)計(jì)成比別的語(yǔ)言更加復(fù)雜的形式,它提供了數(shù)據(jù)屬性和JavaScript對(duì)象的兩類(lèi)屬性器屬性(getter/setter)兩類(lèi)。對(duì)JavaScript來(lái)說(shuō),屬性并非只是簡(jiǎn)單的名稱(chēng)和值,JavaScript用一組特征(attribute)來(lái)描述屬性(property)。先來(lái)說(shuō)第一類(lèi)屬性,數(shù)據(jù)屬性。它比較接近于其它語(yǔ)言的屬性概念。數(shù)據(jù)屬性具有四個(gè)特征。value:就是屬性的值。 writable:決定屬性能否被賦值。enumerable:決定for in能否枚舉該屬性。configurable:決定該屬性能否被刪除或者改變特征
12、值。在大多數(shù)情況下,我們只關(guān)心數(shù)據(jù)屬性的值即可。第二類(lèi)屬性是器(getter/setter)屬性,它也有四個(gè)特征。getter:函數(shù)或undefined,在取屬性值時(shí)被調(diào)用。setter:函數(shù)或undefined,在設(shè)置屬性值時(shí)被調(diào)用。enumerable:決定for in能否枚舉該屬性。configurable:決定該屬性能否被刪除或者改變特征值。file:/J/geektime/唯一更新/ebook/重學(xué)前端/06JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?.html2019/2/10 21:38:5306|JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?器屬性使得屬性在讀和寫(xiě)時(shí)執(zhí)行代
13、碼,它使用者在寫(xiě)和讀屬性時(shí),得到完全不同的值,它可以視為一種函數(shù)的語(yǔ)法糖。我們通常用于定義屬性的代碼會(huì)產(chǎn)生數(shù)據(jù)屬性,其中的writable、enumerable、configurable都默認(rèn)為true。我們可以使用內(nèi)置函數(shù)Object.getOwnPropertyDescripter來(lái)查看,如以下代碼所示:var o = a: 1 ;o.b = 2;/a和b皆為數(shù)據(jù)屬性O(shè)bject.getOwnPropertyDescriptor(o,"a") / value: 1, writable: true, enumerable: true, configurable: true
14、 Object.getOwnPropertyDescriptor(o,"b") / value: 2, writable: true, enumerable: true, configurable: true我們?cè)谶@里使用了兩種語(yǔ)法來(lái)定義屬性,定義完屬性后,我們用JavaScript的API來(lái)查看這個(gè)屬性,我們可以發(fā)現(xiàn),這樣定義出來(lái)的屬性都是數(shù)據(jù)屬性,writeable、enumerable、configurable都是默認(rèn)值為true。如果我們要想改變屬性的特征,或者定義器屬性,我們可以使用 Object.defineProperty,示例如下:var o = a: 1
15、;Object.defineProperty(o, "b", value: 2, writable: false, enumerable: false, configurable: true);/a和b都是數(shù)據(jù)屬性,但特征值變化了Object.getOwnPropertyDescriptor(o,"a"); / value: 1, writable: true, enumerable: true, configurable: true Object.getOwnPropertyDescriptor(o,"b"); / value: 2
16、, writable: false, enumerable: false, configurable: trueo.b = 3; console.log(o.b); / 2這里我們使用了Object.defineProperty來(lái)定義屬性,這樣定義屬性可以改變屬性的writable和enumerable。我們同樣用Object.getOwnPropertyDescriptor來(lái)查看,發(fā)現(xiàn)確實(shí)改變了writable和enumerable特征。因?yàn)閣ritable特征為false,所以我們重新對(duì)b賦值,b的值生變化。發(fā)在創(chuàng)建對(duì)象時(shí),也可以使用 get 和 set 關(guān)鍵字來(lái)創(chuàng)建var o = get
17、 a() return 1 ;console.log(o.a); / 1器屬性,代碼如下所示:器屬性跟數(shù)據(jù)屬性不同,每次屬性都會(huì)執(zhí)行g(shù)etter或者setter函數(shù)。這里我們的getter函數(shù)返回了1,所以o.a每次都得到1。這樣,我們就理解了,實(shí)際上JavaScript 對(duì)象的運(yùn)行時(shí)是一個(gè)“屬性的集合”,屬性以字符串或者Symbol為key,以數(shù)據(jù)屬性特征值或者為value。器屬性特征值對(duì)象是一個(gè)屬性的索引結(jié)構(gòu)(索引結(jié)構(gòu)是一類(lèi)常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),我們可以把它理解為一個(gè)能夠以比較快的速度用key來(lái)查找value的字典)。我們以上面的對(duì) 象o為例,你可以想象一下“a”是key。writable:tr
18、ue,value:1,configurable:true,enumerable:true是value。我們?cè)谇懊娴念?lèi)型課程中,已經(jīng)介紹了Symbol類(lèi)型,能夠以Symbol為屬性名,這是JavaScript對(duì)象的一個(gè)特色。講到了這里,如果你理解了對(duì)象的特征,也就不難理解我開(kāi)篇提出來(lái)的問(wèn)題。你甚至可以理解為什么會(huì)有“JavaScript不是面向?qū)ο蟆边@樣的說(shuō)法了。這是由于JavaScript的對(duì)象設(shè)計(jì)跟目前主流基于類(lèi)的面向?qū)ο蟛町惙浅4?。file:/J/geektime/唯一更新/ebook/重學(xué)前端/06JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?.html2019/2/10 21:38:
19、5306|JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?可事實(shí)上,這樣的對(duì)象系統(tǒng)設(shè)計(jì)雖然特別,但是JavaScript提供了完全運(yùn)行時(shí)的對(duì)象系統(tǒng),這使得它可以模仿多數(shù)面向?qū)ο缶幊谭妒剑ㄏ乱还?jié)課我們會(huì)給你介 紹JavaScript中兩種面向?qū)ο缶幊痰姆妒剑夯陬?lèi)和基于原型),所以它也是正統(tǒng)的面向?qū)ο笳Z(yǔ)言。JavaScript語(yǔ)言標(biāo)準(zhǔn)也已經(jīng)明確說(shuō)明,JavaScript是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,標(biāo)準(zhǔn)中能這樣說(shuō),正是因?yàn)镴avaScript的高度動(dòng)態(tài)性的對(duì)象系統(tǒng)。所以,我們應(yīng)該在理解其設(shè)計(jì)思想的基礎(chǔ)上充分挖掘它的能力,而不是機(jī)械地模仿其它語(yǔ)言。結(jié)語(yǔ)要想理解JavaScript對(duì)象,必須清空我們腦子里“
20、基于類(lèi)的面向?qū)ο蟆毕嚓P(guān)的知識(shí),回到人類(lèi)對(duì)對(duì)象的樸素認(rèn)知和面向?qū)ο蟮恼Z(yǔ)言無(wú)關(guān)基礎(chǔ)理論,我們就能夠理 解JavaScript面向?qū)ο笤O(shè)計(jì)的思路。在這篇文章中,我從對(duì)象的基本理論出發(fā),和你理清了關(guān)于對(duì)象的一些基本概念,分析了JavaScript對(duì)象的設(shè)計(jì)思路。接下來(lái)又從運(yùn)行時(shí)的角度,介紹了JavaScript對(duì)象的具體設(shè)計(jì):具有高度動(dòng)態(tài)性的屬性集合。很多人在思考JavaScript對(duì)象時(shí),會(huì)帶著已有的“對(duì)象”觀來(lái)看問(wèn)題,最后的結(jié)果當(dāng)然就是“剪不斷理還亂”了。在后面的文章中,我會(huì)繼續(xù)帶你探索JavaScript對(duì)象的一些機(jī)制,看JavaScript如何基于這樣的動(dòng)態(tài)對(duì)象模型設(shè)計(jì)礎(chǔ)設(shè)施。你還知道哪些面向
21、對(duì)象語(yǔ)言,它們的面向?qū)ο笙到y(tǒng)是怎樣的?請(qǐng)留言告訴我吧!的原型系統(tǒng),以及你熟悉的函數(shù)、類(lèi)等基file:/J/geektime/唯一更新/ebook/重學(xué)前端/06JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?.html2019/2/10 21:38:5306|JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?精選留言:37°Cboy 2019-01-29 10:06:55這篇講的思路太好了,追本溯源,娓娓道來(lái)。在這里不光能學(xué)到知識(shí)活著重溫知識(shí),還有關(guān)于學(xué)習(xí)和講授的方風(fēng)清不揚(yáng) 2019-01-29 16:46:41php 是世界上最好的編程語(yǔ)言 3贊9贊bitmxy 2019-01-29
22、 07:36:44JS的設(shè)計(jì)者原本是個(gè)Lisp程序員而且不怎麼喜歡Java面向?qū)ο?,所以?cǎi)用了原型。在當(dāng)時(shí)基於原型比基於類(lèi)的做法要靈活很多。file:/J/geektime/唯一更新/ebook/重學(xué)前端/06JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?.html2019/2/10 21:38:5306|JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?3贊Carson 2019-01-29 10:13:55我暫時(shí)接觸的編程有限,JavaScript 是我接觸的第一個(gè)面向?qū)ο笳Z(yǔ)言。由于缺少對(duì)其他語(yǔ)言的了解,winter在文中的橫向?qū)Ρ龋杏X(jué)能讓我更容易理解 JavaScript 的設(shè)計(jì)思路,
23、以及 Object 這么設(shè)計(jì)的。關(guān)于ECMAScript 2015 加入的 “類(lèi)”,其實(shí)它并不是 JavaScript 新增的面向?qū)ο竽J剑饕钦Z(yǔ)法糖的作用,只是一種特殊的函數(shù),背后仍然是基于原型的設(shè)計(jì)思路。2贊hhk 2019-01-30 03:14:54關(guān)鍵點(diǎn)在于是否可以在運(yùn)行時(shí)動(dòng)態(tài)改變對(duì)象結(jié)合文章通篇看下來(lái),覺(jué)得 JS 的 OO 和他基于類(lèi)的 OO 不同之處,在于 JS 可以在運(yùn)行時(shí)修改對(duì)象,而 class based 的類(lèi)只能預(yù)先全部定義好,我們并不能在運(yùn)行時(shí)動(dòng)態(tài)修改類(lèi)。在我理解來(lái)說(shuō),條條大路通羅馬,面向?qū)ο笫橇_馬,class based 是一條路,prototype based
24、是另一條路。而且 Symbol 的出現(xiàn),出了許多內(nèi)置接口,讓 JS 又在這條路上走了更遠(yuǎn)一些。(以前上學(xué)背面向?qū)ο蟮娜齻€(gè)特征,封裝,繼承,多態(tài),現(xiàn)在看一下突然覺(jué)得很對(duì)。像我這種年輕一點(diǎn)的前端,很可能就只是相對(duì)熟悉 JS 而已,對(duì)于其他語(yǔ)言只知道 class based 的大概有 Java,C+, C#, Python都是道聽(tīng)途說(shuō),計(jì)算機(jī)基礎(chǔ)也比較薄弱,所以用來(lái)比較其實(shí)比較難。另外,好奇 Symbol 是怎么實(shí)現(xiàn)的,希望以后能大概講講啦。暫時(shí)只想到這些,其他的還在消化 1贊Smallfly 2019-01-29 22:48:10基于類(lèi)的面向?qū)ο笫褂玫氖抢^承,而 Javascript 更像是組合。
25、 1贊范飯飯 2019-01-29 00:48:23第一 1贊蓮 2019-01-30 15:21:56好像winter沒(méi)有回答過(guò)同學(xué)的提問(wèn),是我沒(méi)看見(jiàn)嗎?Marvin 2019-01-30 14:42:06看了這一篇文章,理解了JS中的對(duì)象和java,或C+里面的對(duì)象的一些區(qū)別,應(yīng)該說(shuō)最大的區(qū)別就是:JS中的對(duì)象,可以設(shè)置器屬性,對(duì)吧?還想請(qǐng)問(wèn)file:/J/geektime/唯一更新:我常聽(tīng)見(jiàn)周?chē)鷮W(xué)java或C的朋友說(shuō) 什么什么一個(gè)類(lèi),什么什么對(duì)象。/ebook/重學(xué)前端/06JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?.html2019/2/10 21:38:5306|JavaScr
26、ipt對(duì)象:面向?qū)ο筮€是基于對(duì)象?那他們口中的這個(gè)“類(lèi)”是什么?它和“對(duì)象”又有什么區(qū)別?我是科班出身,但所學(xué)專(zhuān)業(yè)和編程并不太相關(guān),參與過(guò)前端培訓(xùn),至今已經(jīng)從事前端工作2年了,但我始終覺(jué)得些相關(guān)專(zhuān)業(yè)的學(xué)生。基礎(chǔ)不扎實(shí),學(xué)東西慢,比不上那請(qǐng)指教夏大偉 2019-01-30 11:28:01我挺喜歡JS,就是因?yàn)槠鋭?dòng)態(tài)性,可能因?yàn)槲沂且粋€(gè)更喜歡自由的人。不過(guò)任何事情都有兩面性。這種動(dòng)態(tài)性也應(yīng)該有一些問(wèn)題和缺點(diǎn)吧,是什么呢?Error 2019-01-30 10:09:57是否按照犀牛書(shū)的順序講解itgou 2019-01-30 07:53:15var o = get a() return 1 ;和 var o=1兩種寫(xiě)法結(jié)果都是o=1,只是兩種語(yǔ)法糖嗎?或者說(shuō)哪種情況下會(huì)用到第
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公寓按揭貸款管理辦法
- 青椒計(jì)劃項(xiàng)目實(shí)施效果評(píng)估與個(gè)人貢獻(xiàn)總結(jié)報(bào)告
- 豎爐氫冶金工藝在低碳環(huán)保鋼鐵生產(chǎn)中的應(yīng)用探索
- 標(biāo)桿企業(yè)指標(biāo)管理辦法
- 理財(cái)教育大眾化傳播模式與內(nèi)容創(chuàng)新研究
- 全基因組關(guān)聯(lián)分析在小麥抗旱性狀研究中的應(yīng)用
- 《公共圖書(shū)館法》分析:結(jié)構(gòu)特點(diǎn)、生成邏輯與優(yōu)化策略
- 廚房高檔原料管理辦法
- 橋梁安全等級(jí)劃分標(biāo)準(zhǔn)
- 發(fā)票管理辦法追訴時(shí)限
- 保安培訓(xùn)課程表(完整版)咨詢(xún)培訓(xùn)
- 《飛機(jī)電子顯示器顯示符號(hào)》
- 贏利:未來(lái)10年的經(jīng)營(yíng)能力
- 光伏支架風(fēng)荷載分析
- 頭等大事:脫發(fā)青年自救指南
- 馬拉色菌相關(guān)疾病診療指南(2022年版)
- 哈雷之約:基于指數(shù)成分股調(diào)整的選股策略
- 湖北省隨州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)及行政區(qū)劃代碼
- 磁流體密封課件
- T∕CCIA 001-2022 面向網(wǎng)絡(luò)安全保險(xiǎn)的風(fēng)險(xiǎn)評(píng)估指引
- 高處作業(yè)審批表
評(píng)論
0/150
提交評(píng)論