無名殺代碼教程 00.8
這次還是講函數(shù),畢竟這是js的核心。網(wǎng)頁里面有html js css,其中js是賦予網(wǎng)頁交互能力的。
函數(shù)function,也可以翻譯成"功能"。目的就是為了實現(xiàn)某種功能的。一種函數(shù)只干一種活。
要干活嘛,需要2步:
1.這個活,該咋干
2.找誰干
例如player.getDamagedHp,這是計算已損失體力的函數(shù)
這個函數(shù)在game.js.里面可以找到。
getDamagedHp:function(){
return this.maxHp-Math.max(0,this.hp);
},
代碼很簡單,只有一句,意思是:返回這個的體力上限與這個的體力之間的差值(體力至少為0)
那么,就很清楚了,這個活很簡單,就算計算一個減法就行了。
下一步是找個人干這個活。
var num=player.getDamagedHp();
找player干這個活,計算這個的已損失體力。this我翻譯成"這個的",this代表這個函數(shù)的對象,也就是.getDamagedHp前面的部分。找誰干這個活,誰就是這個函數(shù)的對象。
如果是
var num=target.getDamagedHp();
就是target在干這個活了。
/**? 這里的不需要掌握
有沒有辦法讓本來給A干的活,交給B來干呢?有!
var num=player.getDamagedHp.apply(target);
每個函數(shù)都有apply方法,里面可以填2個參數(shù),第一個參數(shù)是指定一個人來干這個活,第二個參數(shù)是這個函數(shù)的參數(shù)列表,要求是數(shù)組類型
*/
有沒有復雜一點的活呢?肯定有。
例如player.addTempSkill,這是添加臨時技能的函數(shù),源代碼就不貼出來了。
這個函數(shù)比之前的getDamagedHp復雜之處在于,它需要2個參數(shù),第一個是技能名,第二個是移除技能時機。(第二個參數(shù)可以不填,默認當前回合結(jié)束)
也就是說,這個活復雜點,需要提供這兩個材料才能開工,不然就是巧婦難為無米之炊。
player.addTempSkill("zhiheng");
//直到結(jié)束階段獲得技能"制衡"
但要注意,參數(shù)有順序要求,不能顛倒。參數(shù)有取值要求,填了錯誤的數(shù)據(jù)會報錯。(事件函數(shù)為了初學者方便,不關(guān)心參數(shù)順序)
//----------分割線-----------//
有些函數(shù)不需要人來干(系統(tǒng)來干)
alert("皮一下,真開心!");
var num=parseInt("123");
還要注意一點,不是你的活,大部分不能干。
例如:
game.getDamagedHp();
這就是錯誤的!game沒有g(shù)etDamagedHp這個活,不會干。
*那么,不會可以學嗎?可以,這屬于超綱內(nèi)容,就不講了。
最后,講下boolean邏輯類型
這個類型只有true和false兩個值,那這個類型是不是沒卵用呢?不是。
邏輯也是可以計算的。下面講下邏輯運算符
&&? 意思是'且'。只有兩邊都是true,整個的結(jié)果才是true
if(3>2 && 2>1)alert("這個世界是正常的");
||? 意思是'或'。只有兩邊都是false,整個的結(jié)果才是false
if(3<2 || 2<1)alert("這個世界是誰設(shè)計的?");
!? 意思是'非'。用于把原來的值變成相反的值。
if(!player.isAlive())alert("人被殺,就會死。");
前面2個例子不建議這么寫,這種3>2的判斷,稱作"死代碼",直接寫個true就行了。
這3種運算符混用,怎么計算?
!a && b || c
等價于(!a&&b)||c
等價于((!a)&&b)||c
其實不用刻意去記,到時候加括號就行了。
邏輯運算的短路
如果是"且"邏輯,第一個條件就是false了,第2個條件看都不用看,整個的結(jié)果就是false
(后面的判斷或函數(shù)調(diào)用都不會執(zhí)行)
A:綠茶婊是那種長得漂亮...
B:你不是
A:我還沒說完,是那種長得漂亮...
B:你不是
"或"邏輯,第一個條件是true就不要看了,整個結(jié)果是true
A:來找工作啊,我們的條件是...
B:我是法國人
A:你被錄用了
好了這篇專欄就到這里了,字數(shù)很多,玩了點梗。希望大家能有所收獲。