2021-11-28

十、函數(shù)補(bǔ)充以及初識(shí)對(duì)象

1.arguments

arguments對(duì)象里面保存這方法的所有參數(shù)。arguments對(duì)象里面有個(gè)一個(gè)callee方法,該方法指向當(dāng)前方法本身幌衣。

定義穩(wěn)定的遞歸函數(shù):

function calc(num){

? ? if(num===1){

? ? ? ? return num

? ? }

? ? // 因?yàn)閍rguments.callee 就時(shí) 指向當(dāng)前方法本身。

? ? // 這樣的做的好處是壤玫,防止外部方法名修改后豁护,導(dǎo)致遞歸調(diào)用失效。

? ? let sum = num + arguments.callee(num-1)

? ? return sum

}

<!DOCTYPE html>

<html>

<head>

? ? <meta charset="UTF-8">

? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">

? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">

? ? <title>arguments</title>

</head>

<body>

? ? <script>

? ? ? ? function fn1(a,b,c){

? ? ? ? ? ? //方法在調(diào)用時(shí)欲间,如果沒(méi)有傳遞實(shí)參楚里,形參的值是undefined

? ? ? ? ? ? console.log(a,b,c);

? ? ? ? ? ? // arguments是函數(shù)內(nèi)部的一個(gè)內(nèi)置對(duì)象

? ? ? ? ? ? // arguments對(duì)象里面保存這方法的所有參數(shù)

? ? ? ? ? ? // arguments對(duì)象里面有個(gè)一個(gè)callee方法,該方法指向當(dāng)前方法本身

? ? ? ? ? ? console.log(arguments);

? ? ? ? ? ? let sum = 0

? ? ? ? ? ? for(let i=0;i<arguments.length;i++){

? ? ? ? ? ? ? ? sum += arguments[i]

? ? ? ? ? ? }

? ? ? ? ? ? return sum

? ? ? ? }

? ? ? ? let sum = fn1(100,200,300,400,500,600)

? ? ? ? console.log(sum);

? ? ? ? console.log('----------------------------');

? ? ? ? // 計(jì)算1-20之間所有數(shù)的求和

? ? ? ? function calc(num){

? ? ? ? ? ? if(num===1){

? ? ? ? ? ? ? ? return num

? ? ? ? ? ? }

? ? ? ? ? ? // arguments.callee指向當(dāng)前方法本身

? ? ? ? ? ? // 所以猎贴,在寫遞歸算法時(shí)會(huì)經(jīng)常使用班缎。

? ? ? ? ? ? return num + arguments.callee(num-1)

? ? ? ? }

? ? ? ? console.log(calc(20));

? ? </script>

</body>

</html>

2.分頁(yè)方法

//定義一個(gè)分頁(yè)方法,方法的三個(gè)參數(shù)分別是:原始數(shù)組她渴,頁(yè)碼达址,每頁(yè)數(shù)量

function pageData(arr,pageIndex,pageSize){

? ? //思路:就是對(duì)原始數(shù)組中的數(shù)據(jù),做截取

? ? //定義截取數(shù)據(jù)的起始位置

? ? let start = (pageIndex-1)*pageSize

? ? //定義截取數(shù)據(jù)的結(jié)束位置

? ? let end = start+pageSize

? ? return arr.slice(start,end)

}

<!DOCTYPE html>

<html>

<head>

? ? <meta charset="UTF-8">

? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">

? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">

? ? <title>分頁(yè)方法</title>

</head>

<body>

? ? <script>

? ? ? ? // 定義一個(gè)數(shù)組

? ? ? ? let arr = [11,22,33,44,55,66,77,88,99,111,222,333,444,555,666,777,888,999]

? ? ? ? // 每頁(yè)3條數(shù)據(jù)趁耗,返回第3頁(yè)數(shù)據(jù)

? ? ? ? let r1 = arr.slice(6,9)

? ? ? ? console.log(r1);

? ? ? ? // 每頁(yè)4條數(shù)據(jù)沉唠,返回第4頁(yè)數(shù)據(jù)

? ? ? ? let r2 = arr.slice(12,16)

? ? ? ? console.log(r2);

? ? ? ? // 沒(méi)有5條數(shù)據(jù),返回第3頁(yè)數(shù)據(jù)

? ? ? ? let r3 = arr.slice(10,15)

? ? ? ? console.log(r3);

? ? ? ? console.log('------------------------');

? ? ? ? // 定義一個(gè)分頁(yè)方法苛败,參數(shù)是:數(shù)組满葛,頁(yè)碼,每頁(yè)數(shù)量

? ? ? ? function pageData(arr,pageIndex,pageSize){

? ? ? ? ? ? let start = (pageIndex-1)*pageSize? //算出起始下標(biāo)

? ? ? ? ? ? let end = start+pageSize? //算出結(jié)束下標(biāo)

? ? ? ? ? ? //根據(jù)起始下標(biāo)和結(jié)束下標(biāo)罢屈,從原始數(shù)組中截取對(duì)應(yīng)的數(shù)據(jù)并返回

? ? ? ? ? ? return arr.slice(start,end)

? ? ? ? }

? ? ? ? console.log(pageData(arr,3,3));

? ? ? ? console.log(pageData(arr,4,4));

? ? ? ? console.log(pageData(arr,3,5));

? ? </script>

</body>

</html>

3.初識(shí)對(duì)象

如果 a.b 嘀韧,那么a就是對(duì)象,b是a的屬性缠捌。如果 a.c()锄贷,那么a就是對(duì)象,c是a的方法曼月。對(duì)象就是擁有一組屬性和方法的集合肃叶。

定義對(duì)象有兩種方式:1.采用字面量賦值方式直接定義。2.采用構(gòu)造函數(shù)的方式new一個(gè)對(duì)象

1.采用字面量賦值方式定義對(duì)象

let obj = {

? ? //定義屬性

? ? //定義方法

}

通過(guò)對(duì)象名.屬性十嘿,調(diào)用對(duì)象的屬性,可以獲取屬性的值岳锁,也可以修改屬性的值绩衷,也可以添加新的屬性。通過(guò)對(duì)象名.方法(),調(diào)用對(duì)象的方法咳燕,執(zhí)行方法里面的代碼

<!DOCTYPE html>

<html>

<head>

? ? <meta charset="UTF-8">

? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">

? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">

? ? <title>對(duì)象</title>

</head>

<body>

? ? <script>

? ? ? ? // 對(duì)象就是擁有一組屬性和方法的集合

? ? ? ? // 如果 a.b 勿决,那么a就是對(duì)象,b是a的屬性

? ? ? ? // 如果 a.c()招盲,那么a就是對(duì)象低缩,c是a的方法

? ? ? ? // 定義對(duì)象的第一種方式:采用字面量賦值方式直接定義

? ? ? ? let stu1 = {

? ? ? ? ? ? //屬性名:屬性值的方式,定義屬性

? ? ? ? ? ? no:1001,

? ? ? ? ? ? name:'張三',

? ? ? ? ? ? age:20,

? ? ? ? ? ? sex:'男',

? ? ? ? ? ? //定義學(xué)生的方法

? ? ? ? ? ? study:function(){

? ? ? ? ? ? ? ? console.log('每天學(xué)習(xí)8小時(shí)');

? ? ? ? ? ? },

? ? ? ? ? ? play:function(){

? ? ? ? ? ? ? ? console.log('每天玩8小時(shí)');

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? console.log(stu1);

? ? ? ? //調(diào)用對(duì)象身上的屬性

? ? ? ? console.log(stu1.name);

? ? ? ? console.log(stu1.age);

? ? ? ? //調(diào)用對(duì)象身上的方法

? ? ? ? stu1.study()

? ? ? ? stu1.play()

? ? </script>

</body>

</html>

案例:定義計(jì)算器對(duì)象曹货,實(shí)現(xiàn)加減乘除咆繁。

<!DOCTYPE html>

<html>

<head>

? ? <meta charset="UTF-8">

? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">

? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">

? ? <title>使用對(duì)象制作計(jì)算器</title>

</head>

<body>

? ? <script>

? ? ? ? //定義一個(gè)計(jì)算器對(duì)象

? ? ? ? let calc = {

? ? ? ? ? ? //定義計(jì)算器的屬性

? ? ? ? ? ? num1:0,

? ? ? ? ? ? num2:0,

? ? ? ? ? ? //定義計(jì)算器的方法

? ? ? ? ? ? jia:function(){

? ? ? ? ? ? ? ? //在對(duì)象的方法中,獲取對(duì)象的其它成員顶籽,要通過(guò)this

? ? ? ? ? ? ? ? console.log(`${this.num1}+${this.num2}=${this.num1+this.num2}`);

? ? ? ? ? ? },

? ? ? ? ? ? //在SE6中玩般,對(duì)象的方法,也可以采用下面的方式

? ? ? ? ? ? jian(){

? ? ? ? ? ? ? ? console.log(`${this.num1}-${this.num2}=${this.num1-this.num2}`);

? ? ? ? ? ? },

? ? ? ? ? ? cheng(){

? ? ? ? ? ? ? ? console.log(`${this.num1}*${this.num2}=${this.num1*this.num2}`);

? ? ? ? ? ? },

? ? ? ? ? ? chu(){

? ? ? ? ? ? ? ? console.log(`${this.num1}/${this.num2}=${this.num1/this.num2}`);

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? //給計(jì)算器對(duì)象的兩個(gè)屬性賦值

? ? ? ? calc.num1 = 200

? ? ? ? calc.num2 = 20

? ? ? ? calc.jia()

? ? ? ? calc.jian()

? ? ? ? calc.cheng()

? ? ? ? calc.chu()

? ? </script>

</body>

</html>

2.采用構(gòu)造函數(shù)的方式new一個(gè)對(duì)象

可以直接new一個(gè)Object對(duì)象

let obj = new Object()

也可以定義一個(gè)構(gòu)造函數(shù)礼饱,再出new這個(gè)構(gòu)造函數(shù)的對(duì)象坏为。構(gòu)造函數(shù)也稱為:類,是自定義的一種類型镊绪。

//定義學(xué)生類

function Student(形參...){

? ? //定義屬性(必須使用this.)

? ? //定義方法(必須使用this.)

}

//創(chuàng)建學(xué)生對(duì)象

let s1 = new Student(實(shí)參...)

<!DOCTYPE html>

<html>

<head>

? ? <meta charset="UTF-8">

? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">

? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">

? ? <title>構(gòu)造函數(shù)</title>

</head>

<body>

? ? <script>

? ? ? ? // 構(gòu)造函數(shù):首先是個(gè)函數(shù)匀伏,這個(gè)函數(shù)用來(lái)創(chuàng)建出對(duì)象

? ? ? ? // 如果使用構(gòu)造函數(shù)創(chuàng)建出對(duì)象:使用new關(guān)鍵字。

? ? ? ? // 可以使用系統(tǒng)構(gòu)造函數(shù)Object創(chuàng)建一個(gè)對(duì)象蝴韭。效果等同于{}

? ? ? ? let obj1 = new Object()?

? ? ? ? console.log(obj1);

? ? ? ? let obj2 = {}

? ? ? ? console.log(obj2);

? ? ? ? console.log('--------------------------------');

? ? ? ? // 多數(shù)情況下够颠,都是先自定義一個(gè)構(gòu)造函數(shù),再通過(guò)自定義的構(gòu)造函數(shù)創(chuàng)建出對(duì)應(yīng)的對(duì)象

? ? ? ? // 可以將構(gòu)造函數(shù)理解成:類

? ? ? ? function Student(no,name,age,sex){

? ? ? ? ? ? //這里的this万皿,用于給構(gòu)造函數(shù)定義成員

? ? ? ? ? ? this.no = no

? ? ? ? ? ? this.name = name

? ? ? ? ? ? this.age = age

? ? ? ? ? ? this.sex = sex

? ? ? ? ? ? this.sayHi = function(){

? ? ? ? ? ? ? ? console.log(`大家好摧找!我叫${this.name}`);

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? // 通過(guò)類(構(gòu)造函數(shù))可以創(chuàng)建出無(wú)數(shù)個(gè)對(duì)象

? ? ? ? let s1 = new Student(1001,'張三',20,'男')

? ? ? ? console.log(s1);

? ? ? ? s1.sayHi()

? ? ? ? let s2 = new Student(1002,'李四',22,'女')

? ? ? ? console.log(s2);

? ? ? ? s2.sayHi()

? ? ? ? let s3 = new Student(1003,'王五',24,'男')

? ? ? ? console.log(s3);

? ? ? ? s3.sayHi()

? ? </script>

</body>

</html>

練習(xí)題:

定義一個(gè)棋子類,里面有四個(gè)屬性牢硅,分別是:名稱蹬耘,顏色,X軸位置减余,Y軸位置

比如:紅色的馬综苔,當(dāng)前位置是(X=15,Y=11)? 里面有兩個(gè)方法:分別是:

1.顯示當(dāng)前棋子在什么位置

2.移動(dòng)方法,該方法位岔,需要傳兩個(gè)參數(shù)如筛,就是X軸和Y軸的新坐標(biāo),移動(dòng)方法執(zhí)行完后抒抬,在方法的最下面杨刨,調(diào)用一次顯示當(dāng)前位置的方法。

<!DOCTYPE html>

<html>

<head>

? ? <meta charset="UTF-8">

? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">

? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">

? ? <title>構(gòu)造函數(shù)練習(xí)</title>

</head>

<body>

? ? <script>

? ? ? ? // 定義一個(gè)棋子構(gòu)造函數(shù)(類)

? ? ? ? function Chess(name,color,x,y){

? ? ? ? ? ? //定義屬性

? ? ? ? ? ? this.name=name

? ? ? ? ? ? this.color=color

? ? ? ? ? ? this.x=x

? ? ? ? ? ? this.y=y

? ? ? ? ? ? //定義方法

? ? ? ? ? ? //顯示當(dāng)前位置的方法

? ? ? ? ? ? this.show=function(){

? ? ? ? ? ? ? ? console.log(`${this.color}${this.name}擦剑,當(dāng)前位置是X:${this.x} Y:${this.y}`);

? ? ? ? ? ? }

? ? ? ? ? ? //移動(dòng)棋子的方法

? ? ? ? ? ? this.move=function(x,y){

? ? ? ? ? ? ? ? this.x = x

? ? ? ? ? ? ? ? this.y = y

? ? ? ? ? ? ? ? //位置更新后妖胀,重新調(diào)用顯示當(dāng)前位置的方法

? ? ? ? ? ? ? ? this.show()

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? // 創(chuàng)建一個(gè)紅馬

? ? ? ? let redHorse = new Chess('馬','紅',15,1)

? ? ? ? redHorse.show()

? ? ? ? redHorse.move(13,2)

? ? ? ? //創(chuàng)建一個(gè)黑車

? ? ? ? let blackCar = new Chess('車','黑',1,1)

? ? ? ? blackCar.show()

? ? ? ? blackCar.move(5,1)

? ? </script>

</body>

</html>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芥颈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赚抡,更是在濱河造成了極大的恐慌爬坑,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涂臣,死亡現(xiàn)場(chǎng)離奇詭異盾计,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赁遗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門署辉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吼和,你說(shuō)我怎么就攤上這事涨薪。” “怎么了炫乓?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵刚夺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我末捣,道長(zhǎng)侠姑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任箩做,我火速辦了婚禮莽红,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邦邦。我一直安慰自己安吁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布燃辖。 她就那樣靜靜地躺著鬼店,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黔龟。 梳的紋絲不亂的頭發(fā)上妇智,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音氏身,去河邊找鬼巍棱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛋欣,可吹牛的內(nèi)容都是我干的航徙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼陷虎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捉偏!你這毒婦竟也來(lái)了倒得?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夭禽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后谊路,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讹躯,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年缠劝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了潮梯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惨恭,死狀恐怖秉馏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脱羡,我是刑警寧澤萝究,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站锉罐,受9級(jí)特大地震影響帆竹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脓规,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一栽连、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侨舆,春花似錦秒紧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至复颈,卻和暖如春绩聘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耗啦。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工凿菩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帜讲。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓衅谷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親似将。 傳聞我的和親對(duì)象是個(gè)殘疾皇子获黔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 八蚀苛、初識(shí)函數(shù) 1.定義 function 是定義函數(shù)的關(guān)鍵字,函數(shù)也稱為方法 玷氏。 函數(shù)分為:1.無(wú)參函數(shù) 2.帶...
    默默_01cf閱讀 284評(píng)論 0 0
  • 九堵未、高階函數(shù) 定義:就是一個(gè)函數(shù)的參數(shù)是函數(shù),或者返回值是函數(shù)盏触,滿足其中一個(gè)就是高階函數(shù) 開閉原則:對(duì)擴(kuò)展是開發(fā)的...
    默默_01cf閱讀 160評(píng)論 0 0
  • 七渗蟹、Math和Date 1.排序算法 sort()方法,用于對(duì)數(shù)組排序赞辩。注意:該排序方法雌芽,是根據(jù)數(shù)組中,每一個(gè)元素...
    默默_01cf閱讀 124評(píng)論 0 0
  • 1.實(shí)現(xiàn)數(shù)組的高階函數(shù) 2.arguments arguments對(duì)象里面保存這方法的所有參數(shù) arguments...
    z丶w閱讀 161評(píng)論 0 0
  • 參考規(guī)范:https://tc39.es/ecma262/[https://tc39.es/ecma262/]辨嗽。 ...
    優(yōu)迪閱讀 971評(píng)論 0 1