js當(dāng)然有類(lèi)的概念,而且它和java一樣,被設(shè)計(jì)成純粹的面向?qū)ο蟮恼Z(yǔ)言。js是弱類(lèi)型語(yǔ)言,但這個(gè)并不意味著它沒(méi)有類(lèi)的概念。很明顯地,我們經(jīng)常能看到new Date()、new Array()之類(lèi)的調(diào)用。這不就是類(lèi)嗎?
主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)、程序開(kāi)發(fā)、微網(wǎng)站、微信平臺(tái)小程序開(kāi)發(fā)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等多方位專(zhuān)業(yè)化運(yùn)作于一體,具備承接不同規(guī)模與類(lèi)型的建設(shè)項(xiàng)目的能力。
一、定義類(lèi)
那我們?nèi)绾卧趈s中自定義一個(gè)類(lèi)呢?其實(shí)應(yīng)該換個(gè)說(shuō)法,我們?cè)撛趺传@取一個(gè)某種自定義類(lèi)型的對(duì)象。
//?自定義類(lèi)Class
function?Class(){
}
//?實(shí)例化Class
var?clazz?=?new?Class();
沒(méi)錯(cuò),上面就是一個(gè)自定義類(lèi)型對(duì)象的獲取方式。我們將一個(gè)函數(shù)視作構(gòu)造函數(shù),然后配合new關(guān)鍵字調(diào)用這個(gè)函數(shù),它就會(huì)返回某一類(lèi)型的對(duì)象。如果我們執(zhí)行clazz instanceof Class,返回結(jié)果就是true,說(shuō)明clazz確實(shí)是Class類(lèi)的實(shí)例。
基于題主應(yīng)該對(duì)java比較了解,那么我就將上面的js代碼翻譯成對(duì)應(yīng)的java代碼以便理解:
public?class?Class{
}
Class?clazz?=?new?Class();
與Java一樣,js中所有對(duì)象都是默認(rèn)繼承自O(shè)bject類(lèi)的,所以無(wú)論是js還是java,執(zhí)行clazz instanceof Object返回的都是true。
二、成員變量
我們知道,所謂成員變量,是指這個(gè)類(lèi)的實(shí)例對(duì)象具有哪些屬性。先看看Java中如何定義成員變量:
public?Class?{
public?String?name;
public?int?length?=?0;
}
然后對(duì)照js代碼:
function?Class(){
this.name?=?null;
this.length?=?0;
}
這里引出一個(gè)this,在js中,簡(jiǎn)單來(lái)講,this就是指向當(dāng)前對(duì)象,但實(shí)際上js中的this并不好理解,這里也不會(huì)試圖講清楚js中this怎么用。
javascript五種基本類(lèi)型記的方法分別是:
1、string?: 數(shù)據(jù)外面有 ‘’ 或者 “” 把類(lèi)型歸類(lèi)為字符串!; 可以表達(dá)任意數(shù)據(jù),或者說(shuō)任何類(lèi)型數(shù)據(jù)都可以用字符串的形式表示。
2、number?: 數(shù)字 (沒(méi)有整形和浮點(diǎn)型的區(qū)別:整數(shù)和小數(shù)都是number類(lèi)型,)。
3、 boolean?:只有兩個(gè)表達(dá)值: true為真 , false 為假一般用作程序邏輯的判斷,控制程序的流程。
4、undefined : 變量聲明未賦值的時(shí)候,計(jì)算機(jī)默認(rèn)變量值為 undefined。
5、null (空)?: 可以通過(guò)將變量的值設(shè)置為 null 來(lái)清空變量。
JavaScript基本數(shù)據(jù)類(lèi)型有:
1、數(shù)值類(lèi)型:與強(qiáng)類(lèi)型語(yǔ)言如C、Java不同,JavaScript的數(shù)值類(lèi)型不僅包括所有的整形變量,也包括所有的浮點(diǎn)型變量。JavaScript語(yǔ)言中的數(shù)值都是以IEEE 754雙精度浮點(diǎn)數(shù)格式保存。
2、字符串類(lèi)型:JavaScript的子串富川必須用引號(hào)括起來(lái),此處的引號(hào)既可以是單引號(hào),也可以是雙引號(hào)。
javascript有類(lèi)的概念。
js里面類(lèi)通過(guò)function進(jìn)行定義,有些類(lèi)似c++的struct定義。
代碼示例:
function?MyClass(){
this.a?=?'2';
this.show=function(){
alert('1');
}
}
var?myClass?=?new?MyClass();
alert(myClass.a);//獲取屬性
myClass.show();//調(diào)用類(lèi)方法
JavaScript 是面向?qū)ο蟮恼Z(yǔ)言,引用數(shù)據(jù)類(lèi)型都是對(duì)象,包括函數(shù)也是對(duì)象,同時(shí)還可以通過(guò) Object 對(duì)象自定義對(duì)象。
但是,和其他面向?qū)ο笳Z(yǔ)言(如 Java 等高級(jí)語(yǔ)言)比,也有很大差異,JS 中沒(méi)有類(lèi)或接口的概念,即不能直接定義抽象的類(lèi),也不能直接實(shí)現(xiàn)繼承。不過(guò),為了編程的方便,我們可以在 JS 中模擬類(lèi)和繼承的行為。
創(chuàng)建對(duì)象實(shí)例或類(lèi)(雖然沒(méi)有類(lèi)的概念,但是可以把用于創(chuàng)建新對(duì)象的對(duì)象看作類(lèi)),可以通過(guò)構(gòu)造函數(shù)來(lái)實(shí)現(xiàn),構(gòu)造函數(shù)就是具有一系列屬性和行為作為函數(shù)體的函數(shù),可以通過(guò)函數(shù)參數(shù)傳入值。它就相當(dāng)于 Java 中類(lèi)的構(gòu)造函數(shù),需要時(shí)可以通過(guò) var instanceObj = new ConstructorFunc(para1,para2,...) 來(lái)創(chuàng)建對(duì)象(實(shí)例)。
JS 的對(duì)象中還有一個(gè)重要概念,即原型。每個(gè)對(duì)象都有原型,原型也是一個(gè)對(duì)象,可以看做是構(gòu)造函數(shù)的映像,是創(chuàng)建實(shí)例的模型。對(duì)象(類(lèi))的屬性 prototype 即是對(duì)原型對(duì)象的引用,創(chuàng)建實(shí)例后,也有屬性 __proto__ 指向原型對(duì)象,但該屬性是隱含的。
由于不斷創(chuàng)造新對(duì)象(實(shí)例),一級(jí)一級(jí)的傳遞原型對(duì)象,即可構(gòu)成原型鏈。通過(guò)原型鏈,即可實(shí)現(xiàn)繼承。首先將父類(lèi)對(duì)象的實(shí)例給子類(lèi)的原型 ChildCons.prototype = new ParentCons(),再在子類(lèi)構(gòu)造函數(shù)中調(diào)用父類(lèi)構(gòu)造函數(shù)將繼承的屬性初始化。繼承的變通方法還有很多,可以參考一些資料。
javascript中的基本數(shù)據(jù)類(lèi)型有null,undefined,boolean,number,string
復(fù)雜數(shù)據(jù)類(lèi)型為object
在javascript中申明變量使用的關(guān)鍵字都是var,這點(diǎn)與其他的編程語(yǔ)言不盡相同,但是javascript亦含有五種基本的數(shù)據(jù)類(lèi)型(也可以說(shuō)是簡(jiǎn)單數(shù)據(jù)類(lèi)型)和一種復(fù)雜數(shù)據(jù)類(lèi)型,它們分別是:Undefined,Null,Boolean,Number和String。復(fù)雜數(shù)據(jù)類(lèi)型—Object。
1、typeof
typeof這個(gè)關(guān)鍵字是一定要說(shuō)的,因?yàn)閖avascript是松散類(lèi)型的,在變量申明時(shí)并沒(méi)有使用與之類(lèi)型相對(duì)應(yīng)的關(guān)鍵字,如果在代碼中想要獲知某個(gè)變量的基本數(shù)據(jù)量,就可以使用typeof。這里要注意的是typeof返回的是字符串類(lèi)型。
(1)、"undefined"——未申明,或者變量的值即為undefined或者未初始化;
(2)、"boolean" ——如果這變量的值是布爾類(lèi)型;
(3)、"string" ——值是字符串類(lèi)型;
(4)、"number" ——值是數(shù)字類(lèi)型;
(5)、"object" ——對(duì)象或者值為null;
(6)、"function" ——函數(shù)。
在js中函數(shù)也是對(duì)象,但是函數(shù)又要一些區(qū)別與其他對(duì)象的特定,所以ECMAScript在使用typeof的時(shí)候?qū)⑵鋮^(qū)分開(kāi)來(lái)。
2、Undefined
這是一個(gè)很有意思的數(shù)據(jù)類(lèi)型,因?yàn)樗闹抵挥幸粋€(gè),那就是undefined。在申明變量時(shí)如果沒(méi)有將變量賦值的話(huà)這個(gè)變量也是屬于Undefined類(lèi)型的。
如果一個(gè)變量沒(méi)有申明就直接去訪問(wèn)解釋器會(huì)報(bào)錯(cuò)誤信息,但是這樣的變量如果使用typeof返回的結(jié)果也是"undefined"。
3、Null
Null也是一個(gè)只有一個(gè)值得數(shù)據(jù)類(lèi)型,它的值就是null,任何變量只要給其賦值為null的話(huà)這個(gè)變量的數(shù)據(jù)類(lèi)型就是Null類(lèi)型。null值表示控對(duì)象指針,所以申明的變量要是想用來(lái)保存對(duì)象并且在申明之初還不能確定具體保存哪個(gè)對(duì)象的時(shí)候就將其賦值為null,在使用的時(shí)候只要檢查該變量是否為null就可以知道該變量是否保存了對(duì)象。
其實(shí)null和undefined還是有點(diǎn)微妙的關(guān)系的,在javascript中undefined值派生自null,因此ECMA-26規(guī)定了它們的相等性測(cè)試為true。
在實(shí)際的編程中我們沒(méi)有必要將一個(gè)變量賦值為undefined,但是卻有很多情況下要將變量賦值為null,將變量賦值為null可以便于我們將它與undefined區(qū)分也便于垃圾回收處理。
4、Boolean
在javascript中Boolean類(lèi)型用還是比較多的一種簡(jiǎn)單數(shù)據(jù)類(lèi)型,它有兩個(gè)值,分別是true和false,因?yàn)樵趈avascript中字母是區(qū)分大小寫(xiě)的,所以True和False不是Boolean的值。
調(diào)用Boolean()方法可以將任何類(lèi)型的值轉(zhuǎn)化成與之相對(duì)應(yīng)的Boolean類(lèi)型的值,也就是可以將其轉(zhuǎn)化成true或者false。
5、Number
javascript為了支持各種數(shù)值類(lèi)型,定義了不同數(shù)值字面量格式。
最基本的是字面量是十進(jìn)制,此外還有八進(jìn)制和十六進(jìn)制數(shù)的字面量。八進(jìn)制在js中表示是第一位一定要是0,后面就是八進(jìn)制字?jǐn)?shù)序列(0~7),如果字面量值超出了范圍,前面的0會(huì)被忽略,后面的值會(huì)被當(dāng)成十進(jìn)制解析。十六進(jìn)制字面量前兩位必須是0x,后面跟十六進(jìn)制數(shù)字(0~9及A~F)。字母A~F不區(qū)分大小寫(xiě)。
在進(jìn)行數(shù)值計(jì)算時(shí),不論是八進(jìn)制還是十六進(jìn)制最終都會(huì)被轉(zhuǎn)化成十進(jìn)制數(shù)值。
6、Object
Object類(lèi)是所有JavaScript類(lèi)的基類(lèi)(父類(lèi)),提供了一種創(chuàng)建自定義對(duì)象的簡(jiǎn)單方式,不再需要程序員定義構(gòu)造函數(shù)。Object類(lèi)主要屬性:1.constructor:對(duì)象的構(gòu)造函數(shù)。2.prototype:獲得類(lèi)的prototype對(duì)象,static性質(zhì)。