JavaScript定義函數的幾種方式

上節咱們介紹了《JavaScript工做體系中不可或缺的函數》,函數是由事件驅動的或者當它被調用時執行的可重複使用的代碼塊。接下來咱們說說js當中定義(聲明)函數的幾種方式,以及每種方式的特色和與其餘方式的區別。html

一、 函數式聲明html5

function funName(arg1, arg2)
{設計模式

alert(arg1 + 「,」 + arg2);

}函數

特色:此種方式可定義命名的函數變量,而無需給變量賦值,這是一種獨立的結構,不能嵌套在非功能模塊中。函數名在自身做用域和父做用域內是可獲取的(其餘域是娶不到的)。當解析器讀取js代碼時,會先讀取函數的聲明,此種方式定義的函數在執行任何代碼以前均可以訪問(調用)。this

二、 函數表達式(函數字面量)prototype

var fun = function(arg1, arg2){設計

alert(arg1 + 「,」 + arg2);

}
var fun = function funName(arg1,arg2){code

alert(arg1 + 「,」 + arg2);

}htm

(function hello(){對象

alert(「HelloWorld!!!」);

})(); // 自調用

特色:地中方式是將函數定義爲表達式語句的一部分。函數能夠是命名的也能夠是匿名的。並且必須等到解析器執行到它所在的代碼行才能真正被解釋執行。

三、 函數構造法,參數必須加引號

var fun = new Function(‘arg1’, ‘arg2’, ‘alert(arg1 + 「,」 + arg2)’);

特色:從技術角度講,這是一個函數表達式。可是通常不推薦這種方式。

四、 對象直接量

var obj = {

name : 「」,

    getName : function(){

            return this.name;

},

setName : function(name){

this.name = name;

}

};

特色:將方法的定義看作爲一個對象的成員變量,此時對象的變量值爲一個方法,經過訪問該對象的屬性名稱,達到調用方法的效果。

五、 原型繼承

var obj = new Function();

obj.prototype = {

name : 「」,

    getName : function(){

            return this.name;

},

setName : function(name){

this.name = name;

}

};

特色:定義了一個函數對象,在其原型對象中定義方法。在使用prototype的方法時,必須實例化該對象才能調用其方法。

六、 工廠模式

function obj(){

var temp = new Object();

temp.name = 「」;

temp.getName = function(){

return this.name;

};

temp.setName(name){

this.name = name;

};

return temp;

}

特色:工廠模式是軟件工程領域一種廣爲人知的設計模式,因爲在ECMAScript中沒法建立類,所以用函數封裝以特定接口建立對象。即在一個函數內建立一個對象,給對象賦予屬性和方法再將其對象返回。

以上介紹的幾種js中建立方法經常使用的方式,根據其特色和理解能夠根據實際狀況使用不一樣的方式聲明函數。

相關文章
相關標籤/搜索