成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

javascript面向對象技術基礎(三)

開發 前端
好多JAVASCRIPT的文章,對于初學者來說,太深奧,難理解。本系列會從基礎開始講起,今天介紹第三篇,函數,希望會對你有幫助,一起來看。

看了很多介紹javascript面向對象技術的文章,很暈.為什么?不是因為寫得不好,而是因為太深奧.javascript中的對象還沒解釋清楚怎么回事,一上來就直奔主題,類/繼承/原型/私有變量。結果呢,看了大半天,有了一個大概的了解,細細一回味,好像什么都沒懂。

這篇文章是參考<<javascript-the definitive guide,5th edition>>第7,8,9章而寫成的,我也會盡量按照原書的結構來說明javascript的面向對象技術(對象/數組->函數-->類/構造函數/原型).對一些我自己也拿捏不準的地方,我會附上原文的英文語句,供大家參考.

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

函數
javascript函數相信大家都寫過不少了,所以我們這里只是簡單介紹一下.

創建函數:

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

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

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

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  

因此,對于定義好的函數,我們不能指望調用者將所有的參數全部傳進來.對于那些必須用到的參數應該在函數體中加以檢測(用!操作符),或者設置默認值然后同參數進行或(||)操作來取得參數.

Js代碼

  1. function myprint(s1,person) {  
  2. var defaultperson = { //默認person對象  
  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對象參數  
  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  

函數的arguments屬性

在每一個函數體的內部,都有一個arguments標識符,這個標識符代表了一個Arguments對象.Arguments對象非常類似于Array(數組)對象,比如都有length屬性,訪問它的值用"[]"操作符利用索引來訪問參數值,但是,二者是完全不同的東西,僅僅是表面上有共同點而已(比如說修改Arguments對象的length屬性并不會改變它的長度).

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對象有一個callee屬性,標示了當前Arguments對象所在的方法.可以使用它來實現匿名函數的內部遞歸調用.

Js代碼

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

Method--方法

方法就是函數.我們知道,每一個對象都包含0個或多個屬性,屬性可以是任意類型,當然也包括對象.函數本身就是一種對象,因此我們完全可以把一個函數放到一個對象里面,此時,這個函數就成了對象的一個方法.此后如果要使用該方法,則可以通過對象名利用"."操作符來實現.

Js代碼

  1. var obj = {f0:function(){alert("f0");}}; //對象包含一個方法  
  2. function f1() {alert("f1");}  
  3. obj.f1 = f1; //為對象添加方法  
  4. obj.f0(); //f0 f0是obj的方法  
  5. obj.f1(); //f1 f1是obj的方法  
  6. f1(); //f1 f1同時又是一個函數,可以直接調用  
  7. f0(); //f0僅僅是obj的方法,只能通過對象來調用  

方法的調用需要對象的支持,那么在方法中如何獲取對象的屬性呢?this!this關鍵字我們已經很熟悉了,在javascript的方法中,我們可以用this來取得對方法調用者(對象)的引用,從而獲取方法調用者的各種屬性.

Js代碼 

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

下面我們來一個更加面向對象的例子.

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=..來直接改變person的name屬性,在此我們只是為了展示一下剛才提到的內容.另一種改變person屬性的方法就是:定義一個function,接收兩個參數,一個是person,一個是name的值,看起來像是這樣:changeName(person,"newName").哪種方法好呢?很明顯,例子中的方法更形象,更直觀一些,而且好像有了那么一點面向對象的影子.

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

函數的prototype屬性

每一個函數都包含了一個prototype(原型)屬性,這個屬性構成了javascript面向對象的核心基礎.在后面我們會詳細討論.

【編輯推薦】

  1. javascript面向對象技術基礎(一)
  2. javascript面向對象技術基礎(二)
  3. Javascript的興起是否意味著LAMP的終結?
  4. 從零開始學習jQuery之你必須知道的JavaScript
責任編輯:于鐵 來源: iteye.com
相關推薦

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面向對象

2011-05-25 11:15:02

Javascript繼承

2012-01-17 09:34:52

JavaScript

2017-04-21 09:07:39

JavaScript對象編程

2020-10-20 08:35:34

JS基礎進階

2013-08-21 17:20:49

.NET面向對象

2021-10-21 18:47:37

JavaScript面向對象

2012-02-27 09:30:22

JavaScript

2019-09-18 18:32:29

前端javascriptoop

2009-01-04 09:08:30

面向對象繼承接口

2011-05-25 10:21:44

Javascript

2011-05-25 10:59:26

Javascript繼承

2023-10-25 13:42:19

Java面向對象

2010-06-18 17:49:34

UML面向對象技術

2010-06-17 18:17:36

UML面向對象技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕一区二区三区乱码在线 | 玖草资源 | 国产精品成人一区二区三区夜夜夜 | 成人在线视频观看 | 精品96久久久久久中文字幕无 | 日本亚洲欧美 | 亚洲一区中文字幕 | 欧美性受xxxx| 亚洲精品成人网 | 亚洲精品乱码久久久久久久久 | 亚洲欧美一区二区三区情侣bbw | 欧美精品一区三区 | 国产免费人成xvideos视频 | 美女福利视频网站 | 欧美激情综合 | 九九av| 一级毛片免费视频 | 天天精品在线 | 给我免费的视频在线观看 | 视频一区二区在线观看 | 天天干com| 视频在线日韩 | 欧美综合在线观看 | 黄色一级特级片 | 中文字幕视频在线看 | 久久久成人一区二区免费影院 | 欧美一区二区在线观看 | 国产剧情一区 | www.色综合 | 国产精品99久久久久久久久久久久 | 中文字幕一区二区三区四区 | 国产免国产免费 | 91网站在线观看视频 | 夜夜夜夜夜夜曰天天天 | 国产福利视频网站 | 久久久久无码国产精品一区 | www.婷婷 | 国产高清久久久 | 国产精品视频一区二区三区 | 九九亚洲 | 国产在线拍偷自揄拍视频 |