偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

javascript面向?qū)ο蠹夹g(shù)基礎(chǔ)(三)

開(kāi)發(fā) 前端
好多JAVASCRIPT的文章,對(duì)于初學(xué)者來(lái)說(shuō),太深?yuàn)W,難理解。本系列會(huì)從基礎(chǔ)開(kāi)始講起,今天介紹第三篇,函數(shù),希望會(huì)對(duì)你有幫助,一起來(lái)看。

看了很多介紹javascript面向?qū)ο蠹夹g(shù)的文章,很暈.為什么?不是因?yàn)閷?xiě)得不好,而是因?yàn)樘願(yuàn)W.javascript中的對(duì)象還沒(méi)解釋清楚怎么回事,一上來(lái)就直奔主題,類(lèi)/繼承/原型/私有變量。結(jié)果呢,看了大半天,有了一個(gè)大概的了解,細(xì)細(xì)一回味,好像什么都沒(méi)懂。

這篇文章是參考<<javascript-the definitive guide,5th edition>>第7,8,9章而寫(xiě)成的,我也會(huì)盡量按照原書(shū)的結(jié)構(gòu)來(lái)說(shuō)明javascript的面向?qū)ο蠹夹g(shù)(對(duì)象/數(shù)組->函數(shù)-->類(lèi)/構(gòu)造函數(shù)/原型).對(duì)一些我自己也拿捏不準(zhǔn)的地方,我會(huì)附上原文的英文語(yǔ)句,供大家參考.

如果不做說(shuō)明,則文中出現(xiàn)的所有英文語(yǔ)句(程序體除外)都是引自<<javascript-the definitive guide,5th edition>>.

函數(shù)
javascript函數(shù)相信大家都寫(xiě)過(guò)不少了,所以我們這里只是簡(jiǎn)單介紹一下.

創(chuàng)建函數(shù):

function f(x) {........}

var f = function(x) {......}

上面這兩種形式都可以創(chuàng)建名為f()的函數(shù),不過(guò)后一種形式可以創(chuàng)建匿名函數(shù),函數(shù)定義時(shí)可以設(shè)置參數(shù),如果傳給函數(shù)的參數(shù)個(gè)數(shù)不夠,則從最左邊起依次對(duì)應(yīng),其余的用undefined賦值,如果傳給函數(shù)的參數(shù)多于函數(shù)定義參數(shù)的個(gè)數(shù),則多出的參數(shù)被忽略.

Js代碼

  1. function myprint(s1,s2,s3) {  
  2. alert(s1+"_"+s2+"_"+s3);  
  3. }  
  4. myprint(); //undefined_undefined_undefined  
  5. myprint("string1","string2"); //string1_string2_undefined  
  6. myprint("string1","string2","string3","string4"); //string1_string2_string3  

因此,對(duì)于定義好的函數(shù),我們不能指望調(diào)用者將所有的參數(shù)全部傳進(jìn)來(lái).對(duì)于那些必須用到的參數(shù)應(yīng)該在函數(shù)體中加以檢測(cè)(用!操作符),或者設(shè)置默認(rèn)值然后同參數(shù)進(jìn)行或(||)操作來(lái)取得參數(shù).

Js代碼

  1. function myprint(s1,person) {  
  2. var defaultperson = { //默認(rèn)person對(duì)象  
  3. "name":"name1",  
  4. "age":18,  
  5. "sex":"female" 
  6. };  
  7. if(!s1) { //s1不允許為空  
  8. alert("s1 must be input!");  
  9. return false;  
  10. }  
  11. person = person || defaultperson; //接受person對(duì)象參數(shù)  
  12. alert(s1+"_"+person.name+":"+person.age+":"+person.sex);  
  13. };  
  14. myprint(); //s1 must be input!  
  15. myprint("s1"); //s1_name1:18:female  
  16. myprint("s1",{"name":"sdcyst","age":23,"sex":"male"}); //s1_sdcyst:23:male  

函數(shù)的arguments屬性

在每一個(gè)函數(shù)體的內(nèi)部,都有一個(gè)arguments標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符代表了一個(gè)Arguments對(duì)象.Arguments對(duì)象非常類(lèi)似于Array(數(shù)組)對(duì)象,比如都有l(wèi)ength屬性,訪問(wèn)它的值用"[]"操作符利用索引來(lái)訪問(wèn)參數(shù)值,但是,二者是完全不同的東西,僅僅是表面上有共同點(diǎn)而已(比如說(shuō)修改Arguments對(duì)象的length屬性并不會(huì)改變它的長(zhǎng)度).

Js代碼

  1. function myargs() {  
  2. alert(arguments.length);  
  3. alert(arguments[0]);  
  4. }  
  5. myargs(); //0 --- undefined  
  6. myargs("1",[1,2]); //2 --- 1  

Arguments對(duì)象有一個(gè)callee屬性,標(biāo)示了當(dāng)前Arguments對(duì)象所在的方法.可以使用它來(lái)實(shí)現(xiàn)匿名函數(shù)的內(nèi)部遞歸調(diào)用.

Js代碼

  1. function(x) {  
  2. if (x <= 1) return 1;  
  3. return x * arguments.callee(x-1);  
  4. }  

Method--方法

方法就是函數(shù).我們知道,每一個(gè)對(duì)象都包含0個(gè)或多個(gè)屬性,屬性可以是任意類(lèi)型,當(dāng)然也包括對(duì)象.函數(shù)本身就是一種對(duì)象,因此我們完全可以把一個(gè)函數(shù)放到一個(gè)對(duì)象里面,此時(shí),這個(gè)函數(shù)就成了對(duì)象的一個(gè)方法.此后如果要使用該方法,則可以通過(guò)對(duì)象名利用"."操作符來(lái)實(shí)現(xiàn).

Js代碼

  1. var obj = {f0:function(){alert("f0");}}; //對(duì)象包含一個(gè)方法  
  2. function f1() {alert("f1");}  
  3. obj.f1 = f1; //為對(duì)象添加方法  
  4. obj.f0(); //f0 f0是obj的方法  
  5. obj.f1(); //f1 f1是obj的方法  
  6. f1(); //f1 f1同時(shí)又是一個(gè)函數(shù),可以直接調(diào)用  
  7. f0(); //f0僅僅是obj的方法,只能通過(guò)對(duì)象來(lái)調(diào)用  

方法的調(diào)用需要對(duì)象的支持,那么在方法中如何獲取對(duì)象的屬性呢?this!this關(guān)鍵字我們已經(jīng)很熟悉了,在javascript的方法中,我們可以用this來(lái)取得對(duì)方法調(diào)用者(對(duì)象)的引用,從而獲取方法調(diào)用者的各種屬性.

Js代碼 

  1. var obj = {"name":"NAME","sex":"female"};  
  2. obj.print = function() { //為對(duì)象添加方法  
  3. alert(this.name + "_" + this["sex"]);  
  4. };  
  5. obj.print(); //NAME_female  
  6. obj.sex = "male";  
  7. obj.print(); //NAME_male  

下面我們來(lái)一個(gè)更加面向?qū)ο蟮睦?

Js代碼

  1. var person = {name:"defaultname",  
  2. setName:function(s){  
  3. this.name = s;  
  4. },  
  5. "printName":function(){  
  6. alert(this.name);  
  7. }}  
  8. person.printName(); //defaultname  
  9. person.setName("newName");  
  10. person.printName(); //newName  

在上面的例子中,完全可以用person.name=..來(lái)直接改變person的name屬性,在此我們只是為了展示一下剛才提到的內(nèi)容.另一種改變person屬性的方法就是:定義一個(gè)function,接收兩個(gè)參數(shù),一個(gè)是person,一個(gè)是name的值,看起來(lái)像是這樣:changeName(person,"newName").哪種方法好呢?很明顯,例子中的方法更形象,更直觀一些,而且好像有了那么一點(diǎn)面向?qū)ο蟮挠白?

再次強(qiáng)調(diào)一下,方法(Method)本身就是是函數(shù)(function),只不過(guò)方法的使用更受限制.在后面的篇幅中,如果提到函數(shù),那么
提到的內(nèi)容同樣適用于方法,反之則不盡然.

函數(shù)的prototype屬性

每一個(gè)函數(shù)都包含了一個(gè)prototype(原型)屬性,這個(gè)屬性構(gòu)成了javascript面向?qū)ο蟮暮诵幕A(chǔ).在后面我們會(huì)詳細(xì)討論.

【編輯推薦】

  1. javascript面向?qū)ο蠹夹g(shù)基礎(chǔ)(一)
  2. javascript面向?qū)ο蠹夹g(shù)基礎(chǔ)(二)
  3. Javascript的興起是否意味著LAMP的終結(jié)?
  4. 從零開(kāi)始學(xué)習(xí)jQuery之你必須知道的JavaScript
責(zé)任編輯:于鐵 來(lái)源: iteye.com
相關(guān)推薦

2011-05-13 09:58:46

javascript

2011-05-13 10:51:25

javascript

2011-05-13 11:17:18

javascript

2011-05-13 11:27:59

javascript

2011-05-13 12:38:58

javascript

2009-06-10 22:06:29

JavaScript面向?qū)ο?/a>

2011-05-25 11:15:02

Javascript繼承

2012-01-17 09:34:52

JavaScript

2017-04-21 09:07:39

JavaScript對(duì)象編程

2020-10-20 08:35:34

JS基礎(chǔ)進(jìn)階

2013-08-21 17:20:49

.NET面向?qū)ο?/a>

2021-10-21 18:47:37

JavaScript面向對(duì)象

2012-02-27 09:30:22

JavaScript

2019-09-18 18:32:29

前端javascriptoop

2009-01-04 09:08:30

面向?qū)ο?/a>繼承接口

2011-05-25 10:21:44

Javascript

2011-05-25 10:59:26

Javascript繼承

2023-10-25 13:42:19

Java面向?qū)ο?/a>

2010-06-18 17:49:34

UML面向?qū)ο蠹夹g(shù)

2010-06-17 18:17:36

UML面向?qū)ο蠹夹g(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)