javascript中函數和方法的區別


  經常談論起函數和方法,也常常搞不清楚它們之間的界限,經常把兩個混用。首先來看看,兩者是如何定義的?

  函數(function)是可以執行的javascript代碼塊,由javascript程序定義或javascript實現預定義。函數可以帶有實際參數或者形式參數,用於指定這個函數執行計算要使用的一個或多個值,而且還可以返回值,以表示計算的結果。

  方法(method)是通過對象調用的javascript函數。也就是說,方法也是函數,只是比較特殊的函數。假設有一個函數是fn,一個對象是obj,那么就可以定義一個method:

  obj.method = fn;

  obj.method();    //定義之后的調用

  雖然區別對待函數和方法比較有用,但實際比較起來,它們之間並沒有想象中那么大的差別。這樣講吧,函數是可以用函數直接量定義,也就是函數可以直接儲存在變量之中,因為函數和字符串、數值一樣也是數據類型。假如儲存函數的變量是全局變量,也即是window對象的一個屬性。因此,當你調用這個函數時,實際上也是調用window對象的一個方法。所以在函數和方法之間並沒有技術上的區別,真正的差別在於設計和目的,方法是用來對this對象進行操作的,this對象是方法的一個重要屬性,當this對象出現在方法主體內部,this值就指向調用該方法的對象。而函數通常是獨立的,並不需要經常使用this對象。

  下面有個例子展示方法的使用:

function Rect(w, h){    //使用this對象,避免自己調用自己
    this.width = w;
    this.height = h;
}
function area(){
    return this.width * this.height;
}
var r = new Rect(4, 5);
r.area = area;    //將函數賦值給對象的屬性,來定義方法

var result = r.area();    //20

  當然,這個例子只是用來說明問題,並非優雅高效的代碼。也正因方法存在的各種缺點,才引入了原型對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM