溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么理解javascript面向?qū)ο蠹夹g(shù)基礎(chǔ)

發(fā)布時間:2021-11-20 14:48:55 來源:億速云 閱讀:93 作者:柒染 欄目:web開發(fā)

怎么理解javascript面向?qū)ο蠹夹g(shù)基礎(chǔ),針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

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

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

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

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

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

Js代碼

function myprint(s1,s2,s3) {  alert(s1+"_"+s2+"_"+s3);  }  myprint(); //undefined_undefined_undefined  myprint("string1","string2"); //string1_string2_undefined  myprint("string1","string2","string3","string4"); //string1_string2_string3

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

Js代碼

function myprint(s1,person) {  var defaultperson = { //默認(rèn)person對象  "name":"name1",  "age":18,  "sex":"female" };  if(!s1) { //s1不允許為空  alert("s1 must be input!");  return false;  }  person = person || defaultperson; //接受person對象參數(shù)  alert(s1+"_"+person.name+":"+person.age+":"+person.sex);  };  myprint(); //s1 must be input!  myprint("s1"); //s1_name1:18:female  myprint("s1",{"name":"sdcyst","age":23,"sex":"male"}); //s1_sdcyst:23:male

函數(shù)的arguments屬性

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

Js代碼

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

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

Js代碼

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

Method--方法

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

Js代碼

var obj = {f0:function(){alert("f0");}}; //對象包含一個方法  function f1() {alert("f1");}  obj.f1 = f1; //為對象添加方法  obj.f0(); //f0 f0是obj的方法  obj.f1(); //f1 f1是obj的方法  f1(); //f1 f1同時又是一個函數(shù),可以直接調(diào)用  f0(); //f0僅僅是obj的方法,只能通過對象來調(diào)用

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

Js代碼

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

下面我們來一個更加面向?qū)ο蟮睦?

Js代碼

var person = {name:"defaultname",  setName:function(s){  this.name = s;  },  "printName":function(){  alert(this.name);  }}  person.printName(); //defaultname  person.setName("newName");  person.printName(); //newName

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

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

函數(shù)的prototype屬性

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

關(guān)于怎么理解javascript面向?qū)ο蠹夹g(shù)基礎(chǔ)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI