摘要:在中是沒有這樣的關(guān)鍵字的,我們需要這樣做定義在方法內(nèi)也就是內(nèi)部,也可以看作成構(gòu)造函數(shù)的變量,就是私有變量。移動氣球我們需要用到定時器。
什么是JavaScript?
我們可以從幾個方面去說JavaScript是什么:
基于對象
javaScript中內(nèi)置了許多對象供我們使用【String、Date、Array】等等
javaScript也允許我們自己自定義對象
事件驅(qū)動
當(dāng)用戶觸發(fā)執(zhí)行某些動作的時候【鼠標(biāo)單機、鼠標(biāo)移動】,javaScript提供了監(jiān)聽這些事件的機制。當(dāng)用戶觸發(fā)的時候,就執(zhí)行我們自己寫的代碼。
解釋性語言
[x] javaScript代碼是由瀏覽器解析的,并不需要編譯。
基于瀏覽器的動態(tài)交互技術(shù)
既然javaScript是由瀏覽器解析的,那么它肯定要基于瀏覽器。 javaScript讓網(wǎng)頁變得更加“靈活""
弱類型
[x] 像java、c++等編譯型語言,要先定義變量,后使用。javaScript能夠直接使用,不需要先定義
JavaScript變量類型javaScript變量可分為三種類型:
基本類型【number、string、boolean】
javaScript是弱類型語言,在運行的時候才知道具體的類型是什么。所有類型都用var來修飾。
特殊類型【null、undefined】
當(dāng)定義了變量,沒有任何賦值的時候,該變量就是undefined類型
復(fù)合類型【數(shù)組、對象、函數(shù)】
javaScript對象的類型在JavaScript中對象的類型可分為4種:
內(nèi)置對象【String、Math、Array】
自定義對象【程序員自己創(chuàng)建的對象】
瀏覽器對象【windows、document、history、status等等與瀏覽器相關(guān)的對象】
ActiveXObject(XMLHttpRequest)對象【異步對象,使用AJAX用到的對象,使用該對象與服務(wù)器進行異步交互】
定義函數(shù)三種方式函數(shù)是屬于特殊類型的一種,在另外一篇博文已經(jīng)講解了創(chuàng)建對象、創(chuàng)建類的幾種方式,可參考:http://blog.csdn.net/hon_3y/article/details/69362242
值得注意的是:javaScript定義函數(shù)的時候,參數(shù)的類型是不用聲明的!
正常方式下面就定義了一個名稱為mysum的函數(shù)
function mysum(num1,num2){ return num1 + num2; } var myresult = mysum(100,200); alert("myresult="+myresult);Function定義
在JavaScript中, 一切皆是對象,函數(shù)也可以用一個對象來代表:Function,我們可以使用Function來創(chuàng)建對象:
函數(shù)參數(shù)全都是字符串,最后一個字符串是方法體
var youresult = new Function("num1","num2","return num1+num2"); alert( youresult(1000,2000) );
由于這種方法寫起來并不好些,可讀性也不太好,因此很少使用【不推薦使用】
匿名創(chuàng)建函數(shù)其實這種和第一種差不多,只不過是將一個無名的函數(shù)賦值給一個變量。那么這個變量就代表了這個函數(shù)。
var theyresult = function(num1,num2){ return num1 + num2; } alert( theyresult(10000,20000) );
theyresult這個變量就代表了函數(shù)。
創(chuàng)建對象 方式①直接使用new Object()
var obj = new Object();方式②
使用空的{}大括號
var obj2 = {};測試 增加屬性,訪問屬性
我們要為創(chuàng)建的對象增加屬性和訪問屬性的值!
使用.操作符增加屬性JavaScript是弱類型的語言,可以動態(tài)的添加屬性。
obj.age = 20; obj.name = "zhongfucheng"; obj.say = function () { alert("hello"); };測試 使用.操作符訪問屬性
var aa = obj.age; var bb = obj.name;測試 使用[]操作符訪問屬性
var aa = [obj["age"]]; var bb = [obj["name"]];測試 創(chuàng)建類 方式①
使用function來模擬創(chuàng)建類,function充當(dāng)了構(gòu)造函數(shù)
//測試函數(shù) function test() { var teacher = new Teacher(); } //使用function來模擬類 function Teacher() { }測試 方式②
上面的function來模擬類很容易和函數(shù)混淆。
我們一般這樣做:用一個變量記住一個匿名的function當(dāng)做是類,function充當(dāng)了構(gòu)造函數(shù)
function test() { var teacher = new Teacher(); } var Teacher = function () { };測試 方式③
使用JSON語法來創(chuàng)建類,也就是對象直接量定義方法
var obj = { age: 20, str: "zhongfucheng", method:function () { alert("aaa"); } };測試 公有屬性和方法
我們創(chuàng)建公有屬性應(yīng)該在類中指定,創(chuàng)建公有方法應(yīng)該使用原型對象prototype
prototype定義的屬性就類似于Java的靜態(tài)成員:在原型對象上定義了屬性,擁有這個原型對象的function所創(chuàng)建的對象也擁有定義的屬性!所以,我們方法中就使用prototype
var obj = function Teacher(name) { this.name = name; if( typeof obj._init=="undefined") { obj.prototype.setName = function (name) { this.name = name; }; obj.prototype.getName = function () { alert(this.name); }; } obj._init = true; };
創(chuàng)建兩個不同的Teacher對象,name屬性是不一樣的。而它們共享同一份setName()和getName()方法
值得注意的是:prototype定義的屬性只可讀的。如果你想要使用具體對象寫prototype的屬性,實際上并不是寫,而是重新為該類定義了一個同名(和prototype同名)的屬性。在讀取同名屬性的時候,優(yōu)先讀取對象上的屬性,而不是prototype的。
私有屬性我們在Java中,定義私有屬性是通過關(guān)鍵字private來修飾的。。
在JavaScript中是沒有這樣的關(guān)鍵字的,我們需要這樣做:定義在方法內(nèi)【也就是function內(nèi)部,也可以看作成構(gòu)造函數(shù)】的變量,就是私有變量。
var obj = function Teacher(name) { //這是私有屬性,外界不能訪問 var age = 23; //這是公有屬性,外界可以訪問 this.name = name; //想要訪問私有變量age,只能在這里編寫方法來訪問。其余的地方都不行! //我們通常就是在這里編寫公有方法來訪問私有屬性 };靜態(tài)屬性和方法
在JavaScript中定義靜態(tài)屬性其實就是通過prototype原型對象來定義的。
定義靜態(tài)的時機:
當(dāng)類的某個值與對象無關(guān)期望所有位置看到的結(jié)果是一樣的時候,就可以定義為類靜態(tài)屬性。
如果類的一個方法做的是和具體對象無關(guān)的操作,而是做一些工作操作的時候,就可以將這個方法定義為靜態(tài)的類方法。
//靜態(tài)屬性TYPE Book.TYPE = “IT”; Book.print = function(){alert(Book.TYPE);}JavaScript中的for in循環(huán)
在學(xué)習(xí)AJAX的時候,發(fā)現(xiàn)JavaScript中for in循環(huán),這種循環(huán)對于遍歷JSON是很好用的。于是寫下了這篇博文
for in循環(huán)本質(zhì)上是forEach循環(huán),它主要有兩個作用
遍歷數(shù)組
遍歷JavaScript對象
遍歷數(shù)組當(dāng)使用for in來遍歷數(shù)組的時候,它的循環(huán)計數(shù)器是數(shù)組元素的索引值
var a = ["a", "b", "c"]; for(var index in a) { alert(index); }效果: 遍歷JavaScript對象
當(dāng)使用for in來遍歷對象的時候,它的循環(huán)計數(shù)器是對象的屬性名
//對象json上,包含了兩個對象a和b屬性 var json = {a:{num:1},b:{num:2}}; for(var name in json){ alert(name); }效果 JS打氣球游戲
在B站中看見了一個JS大氣球這么一個教程,才知道原來JS+HTML5+CSS3能那么有趣。但是視頻中沒并沒有給出源碼。于是在別人的博客中搜到了對應(yīng)的源碼以及他自己實現(xiàn)的思路,該博主對其進行了改編。
http://www.cnblogs.com/morang/p/7636148.html
以上的博文有源碼的下載。下面我就直接貼上源碼了。思路就在博文中。
氣球大戰(zhàn) 最高連擊:0
本次游戲:0
看了視頻也學(xué)到了之前一直沒有注意的東西:
CSS3很厲害啊,能將方形的div轉(zhuǎn)成是橢圓形的[也就是氣球的形狀],還有盒子的陰影設(shè)置。
使用偽元素就可以不用直接在html中設(shè)置標(biāo)簽了。配合CSS3也能夠做出對應(yīng)的樣式。
使用實體邊框配合CSS3也可以做出不同的形狀樣式
在生成元素的時候,可以先將要生成的元素加入到文檔片段中,再使用文檔片段來進行一次性添加到body上,這樣性能會好很多!
使用~~運算符能夠取整數(shù)
限定氣球的邊界就可以使用max和min函數(shù)來進行限定。這也是很好用的。
移動氣球我們需要用到定時器。
使用call主動調(diào)用方法,把目標(biāo)對象傳遞過去的話,我們就可以使用this指針了。
在定時器中使用bind(this),就可以在定時器中使用this指針的,因為定時器默認是由瀏覽器window來進行調(diào)用的,默認是不能使用this的
綁定單擊事件的時候,不要使用循環(huán)來進行綁定,這樣太耗費性能了,我們可以使用監(jiān)聽事件來進行一次綁定。
在遍歷元素數(shù)組的時候,條件是元素數(shù)組的長度時,我們可以先把該元素數(shù)組的長度初始化出來,那么也可以提升性能!不然就每次判斷前都要去查詢數(shù)據(jù)的長度!
for(var i=0,len = array.length; i 如果文章有錯的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號:Java3y
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/115728.html
摘要:這個構(gòu)造函數(shù)的不管從調(diào)用方式還是內(nèi)部寫法就都很有的感覺,但是從用途上來說,它其實更靠近的概念是中的工廠方法。到這里,所有關(guān)于繼承的東西講完了,接下來準(zhǔn)備準(zhǔn)備說說當(dāng)中的封裝 所謂的對象,就是抽象化的數(shù)據(jù)本身 一個面向?qū)ο筠D(zhuǎn)向面向原型的困惑 我發(fā)現(xiàn)Javascript這門語言每次翻開都會帶給人新感受,尤其是看完其他語言的面向?qū)ο笤賮砜此侨绻阋彩沁^來人就一定記得教科書里面冗長乏味的...
摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...
摘要:作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。這天定位于了解能夠簡單讀懂或者使用的人,如果沒有請參照以下網(wǎng)址,學(xué)習(xí)基礎(chǔ)知識。如有錯誤或者建議歡迎斧正。 作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好JavaScript,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。一年以來接觸的JS都是零零散散的,懂或似懂非懂,花點時間好好鞏固下,有興趣的跟...
摘要:作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。這天定位于了解能夠簡單讀懂或者使用的人,如果沒有請參照以下網(wǎng)址,學(xué)習(xí)基礎(chǔ)知識。如有錯誤或者建議歡迎斧正。 作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好JavaScript,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。一年以來接觸的JS都是零零散散的,懂或似懂非懂,花點時間好好鞏固下,有興趣的跟...
摘要:作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。這天定位于了解能夠簡單讀懂或者使用的人,如果沒有請參照以下網(wǎng)址,學(xué)習(xí)基礎(chǔ)知識。如有錯誤或者建議歡迎斧正。 作為一個前端開發(fā),大多數(shù)面對的都是學(xué)不好JavaScript,不知道如何學(xué),或者說容易半途而廢,這也是說我自己。一年以來接觸的JS都是零零散散的,懂或似懂非懂,花點時間好好鞏固下,有興趣的跟...
閱讀 1944·2021-10-12 10:12
閱讀 3071·2019-08-30 15:44
閱讀 843·2019-08-30 15:43
閱讀 2994·2019-08-30 14:02
閱讀 2076·2019-08-30 12:54
閱讀 3496·2019-08-26 17:05
閱讀 1979·2019-08-26 13:34
閱讀 1050·2019-08-26 11:54