30天學會 MooTools 教學(4): 函數和MooTools

來源:互聯網
上載者:User

  今天開始MooTools系列教程的第4講。如果你還沒有看過上一講,請先查看上一篇教程《30天學會 MooTools 教學(3): 數組管理DOM元素》。今天我們先不講MooTools,而是講一講JavaScript中的函數(function)的基本知識。

  但是,為了符合MooTools這個主題,你需要知道在哪裡該使用MooTools的函數。此前,我們已經在我們的所有範例程式碼中,把代碼都放在 domready方法中。當我們需要把它放在domready的外面時,我們使用了函數(function)。在你在domready裡面調用函數之前, 函數並不會被執行。

  一般來說,一種比較好的方式是儘可能地把你的函數代碼都放在頁面之外的某一個地方,然後通過JavaScript應用來調用它們。當你只是寫代碼玩玩,可能把所有的東西寫在一個頁面上更容易一些。在這個教程中,我們使用下面的約定:

<script type="text/javascript">
/*
* 函數定義寫在這裡
*/

window.addEvent('domready', function() {
/*
* 函數調用寫在這裡
*/
});
</script>

  所有的例子都遵循這個格式,當頁面載入的時候(load)執行函數代碼。在每個函數的下面,都有一個相應的按鈕,你可以點擊它們,然後看到結果。這是通過使用MooTools的事件處理來完成的,明天我們將會講到這個。
函數基礎

  在JavaScript中,有幾種方式來定義函數,由於我們的主題是講解MooTools,因此我們將選擇MooTools的首選方式。下面的樣本是一個函數定義的開始。我們什麽了一個變數,並命名為simple_function,並吧這個變數定義為一個函數:

var simple_function = function(){

然後我們給這個函數增加了一個alert語句,當函數被調用的時候就會執行:
alert('This is a simple function');

最後,我們以一個花括弧結束這個函數的定義:
}

這個關閉花括弧看起來是一件非常簡單的事情,但是很多時候要追蹤這個問題卻是一件很痛苦的事情。因此,適度地強迫對函數定義的關閉符號進行檢查是個不錯的主意。

在下面的例子中,我們把它們組合起來了。在聲明這個函數之後,我們在頁面載入後的domready事件裡面添加了對這個函數的調用。可以點擊例子下面的按鈕查看調用函數simple_function();後的結果。

// 定義simple_function為一個函數
var simple_function = function(){
alert('This is a simple function');
}

window.addEvent('domready', function() {
// 當頁面載入後調用simple_function
simple_function();
});

 
單個參數

  雖然你有很多代碼可以輕鬆地隨時調用,這已經很有用了,但是如果你可以給它傳遞參數(資訊)進行處理,這將會更有用。要在函數中使用參數,你需要在function後面的括弧中添加一個變數,就像這樣:

var name_of_function = function(name_of_the_parameter){
/* 函數代碼寫在這裡 */
}

  一旦你這樣做了,在這個函數內部就可以使用這個變數了。儘管你可以給參數取任何你想要的名字,但是讓參數名更有意義是個不錯的選擇。舉個例子來說, 如果你要傳遞一個小鎮的名字,可能你把參數命名為town_name比其他更模糊的名字要好一些(比如user_input)。

  在下面的例子中,我們定義了一個只帶有一個參數的函數,並在彈出對話方塊中顯示這個變數。請注意,資訊的第一部分被單引號包含起來了,而參數沒有。當你要把參數和硬式編碼字串串連在一起,你需要用加號(+)運算子把他們串連起來,就像下面一樣:

var single_parameter_function = function(parameter){
alert('the parameter is : ' + parameter);
}

window.addEvent('domready', function(){
single_parameter_function('this is a parameter');
});

 
多個參數

  JavaScript沒有限制在一個函數中可以定義的參數的個數。一般來說,要讓傳給函數的參數個數儘可能地少,這會使代碼更具可讀性。函數中定義 的多個參數使用逗號分割,其它行為這和單個參數函數一樣。下面的樣本中的函數帶有兩個數字,並把它們的和賦值給第三個數字,就像這樣:

var third_number = first_number + second_number;

這裡加號(+)運算子的使用和把這些結果串連成字串略有一些不同:

alert(first_number + " plus " + second_number + " equals " + third_number);

雖然這個初一看起來可能有些溷亂,但是實際上卻非常簡單。如果你在兩個數字之間使用加號(+),你就是把它們加在一起。如果你在任意組合的數字和字串之間使用加號(+),那麽就是把所有的東西作為字串串連起來。

var two_parameter_function = function(first_number, second_number){
// 取得first_number和second_number相加的和
var third_number = first_number + second_number;

// 顯示結果
alert(first_number + " plus " + second_number + " equals " + third_number);
}

window.addEvent('domready', function(){
two_parameter_function(10, 5);
});

 
傳回值

  在一個彈出對話方塊中顯示一個函數的執行結果可能很有用,但是有些時候你可能需要在其他地方用到這個結果。要完成這個任務,你需要使用函數中的return功能。下面的範例程式碼中,函數和上面的樣本一樣,不過這裡不是彈出一個對話方塊,而是返回兩個數字相加後的結果:
return third_number;

你會發現,我們也在domready中做了更多的事情。為了顯示這個結果,我們把這個函數的傳回值賦值給了一個名稱為return_value的參數,然後把它顯示在彈出對話方塊中。

var two_parameter_returning_function = function(first_number, second_number){
var third_number = first_number + second_number;
return third_number;
}
window.addEvent('domready', function(){
var return_value = two_parameter_returning_function(10, 5);
alert("return value is : " + return_value);
});

 
把函數作為參數

如果你看看MooTools的domready裡面我們封裝的東西,你會注意到我們把一個函數作為參數傳遞進去了:

window.addEvent('domready', function(){
/* 函數代碼 */
});

一個像這樣把函數作為一個參數傳遞進去的函數稱為匿名函數:
function(){
/* 函數代碼 */
}

在第一篇教程的評論中,Boomstix指出了在domready中不使用匿名函數的一種替代方式。這種方式就是這樣的:
// 建立一個要在domready時調用的函數
var domready_function(){
/* 函數代碼 */
}

// 把函數指定到domready事件
window.addEvent('domready', domready_function);

我不知道這兩種方式在效能和功能性上的任何明顯差別,因此我認為這基本上只是一個風格習慣而已。我們會繼續堅持我們的方式,如果有任何人知道這些差別請告訴我們。
 
程式碼範例

為了刺激你明天的食慾(和彌補今天對MooTools的缺少),我寫了一個沒有什麽意義的函數,可以讓你隨意改變這個頁面的背景:

var changeColor = function(){
// 用來從輸入框中獲得顏色值
// (請參考:
// http://docs.mootools.net/Element/Element#Element:get)
var red = $('red').get('value');
var green = $('green').get('value');
var blue = $('blue').get('value');

// 確保每一個東西都是整數
// (請參考:
// http://docs.mootools.net/Native/Number#Number:toInt)
red = red.toInt();
green = green.toInt();
blue = blue.toInt();

// 確保每一個數字都在1到255之間
// 如果有需要則取整
// (請參考:
// http://docs.mootools.net/Native/Number#Number:limit)
red = red.limit(1, 255);
green = green.limit(1, 255);
blue = blue.limit(1, 255);

// 取得十六進位代碼
// (請參考:
// http://docs.mootools.net/Native/Array/#Array:rgbToHex)
var color = [red, green, blue].rgbToHex();

// 設定為該頁面的背景色
// (請參考:
// http://docs.mootools.net/Element/Element.Style#Element:setStyle)
$('body_wrap').setStyle('background', color);

}

var resetColor = function(){
// 重新設定頁面的背景色為白色
// (請參考:
// http://docs.mootools.net/Element/Element.Style#Element:setStyle)
$('body_wrap').setStyle('background', '#fff');
}

window.addEvent('domready', function(){
// 為按鈕添加點擊事件(明天我們會講這個)
// (請參考:
// http://docs.mootools.net/Element/Element.Event#Element:addEvent)
$('change').addEvent('click', changeColor);
$('reset').addEvent('click', resetColor);
});

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.