熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java進階:編寫高級JavaScript應用代碼[1]

2013-11-15 12:18:26  來源: JSP教程 

  創建高級對象

  使用構造函數來創建對象

  構造函數是一個函數調用它來例示並初始化特殊類型的對象可以使用 new 關鍵字來調用一個構造函數下面給出了使用構造函數的新示例

  var myObject = new Object(); // 創建沒有屬性的通用對象
  var myBirthday = new Date( ); // 創建一個 Date 對象
  var myCar = new Car(); // 創建一個用戶定義的對象並初始化其屬性

  通過構造函數將一個參數作為特定的 this 關鍵字的值傳遞給新創建的空對象然後構造函數負責為新對象執行適應的初始化(創建屬性並給出其初始值)完成後構造函數返回它所構造的對象的一個參數

  編寫構造函數

  可以使用 new 運算符結合像 Object()Date() 和 Function() 這樣的預定義的構造函數來創建對象並對其初始化面向對象的編程其強有力的特征是定義自定義構造函數以創建腳本中使用的自定義對象的能力創建了自定義的構造函數這樣就可以創建具有已定義屬性的對象下面是自定義函數的示例(注意 this 關鍵字的使用)

  function Circle (xPoint yPoint radius) {
   thisx = xPoint; // 圓心的 x 坐標
   thisy = yPoint; // 圓心的 y 坐標
   thisr = radius; // 圓的半徑  }

  調用 Circle 構造函數時給出圓心點的值和圓的半徑(所有這些元素是完全定義一個獨特的圓對象所必需的)結束時 Circle 對象包含三個屬性下面是如何例示 Circle 對象  var aCircle = new Circle( );

  使用原型來創建對象

  在編寫構造函數時可以使用原型對象(它本身是所有構造函數的一個屬性)的屬性來創建繼承屬性和共享方法原型屬性和方法將按引用復制給類中的每個對象因此它們都具有相同的值可以在一個對象中 更改原型屬性的值新的值將覆蓋默認值但僅在該實例中有效屬於這個類的其他對象不受此更改的影響


  下面給出了使用自定義構造函數的示例Circle(注意 this 關鍵字的使用)

  Circleprototypepi = MathPI;
  function ACirclesArea () {   return thispi * thisr * thisr;
   // 計算圓面積的公式為 ?r  }  Circleprototypearea = ACirclesArea;
  // 計算圓面積的函數現在是 Circle Prototype 對象的一個方法
  var a = ACirclearea();
  // 此為如何在 Circle 對象上調用面積函數

  使用這個原則可以給預定義的構造函數(都具有原型對象)定義附加屬性

  例如如果想要能夠刪除字符串的前後空格(與 VBScript 的 Trim 函數類似)就可以給 String 原型對象創建自己的方法

  // 增加一個名為 trim 的函數作為
  // String 構造函數的原型對象的一個方法
  Stringprototypetrim = function()  {
   // 用正則表達式將前後空格
   // 用空字符串替代
   return thisreplace(/(^\s*)|(\s*$)/g );  }
  // 有空格的字符串  var s = leading and trailing spaces ;
  // 顯示 leading and trailing spaces ()  windowalert(s + ( + slength + ));
  // 刪除前後空格  s = strim();
  // 顯示leading and trailing spaces ()
  windowalert(s + ( + slength + ));

  遞歸

  遞歸是一種重要的編程技術該方法用於讓一個函數從其內部調用其自身一個示例就是計算階乘 的階乘被特別地定義為

  更大數的階乘是通過計算 * * 來求得的每次增加 直至達到要計算其階乘的那個數

  下面的段落是用文字定義的計算階乘的一個函數

  如果這個數小於零則拒絕接收如果不是一個整數則將其向下捨入為相鄰的整數如果這個數為 則其階乘為 如果這個數大於 則將其與相鄰較小的數的階乘相乘

  要計算任何大於 的數的階乘至少需要計算一個其他數的階乘用來實現這個功能的函數就是已經位於其中的函數該函數在執行當前的這個數之前必須調用它本身來計算相鄰的較小數的階乘這就是一個遞歸示例

  遞歸和迭代(循環)是密切相關的 ? 能用遞歸處理的算法也都可以采用迭代反之亦然確定的算法通常可以用幾種方法實現您只需選擇最自然貼切的方法或者您覺得用起來最輕松的一種即可

  顯然這樣有可能會出現問題可以很容易地創建一個遞歸函數但該函數不能得到一個確定的結果並且不能達到一個終點這樣的遞歸將導致計算機執行一個無限循環下面就是一個示例在計算階乘的文字描述中遺漏了第一條規則(對負數的處理) 並試圖計算任何負數的階乘這將導致失敗因為按順序計算 的階乘時首先不得不計算 的階乘然而這樣又不得不計算 的階乘如此繼續很明顯這樣永遠也不會到達一個終止點

  因此在設計遞歸函數時應特別仔細如果懷疑其中存在著無限遞歸的可能則可以讓該函數記錄它調用自身的次數如果該函數調用自身的次數太多即使您已決定了它應調用多少次就自動退出

  下面仍然是階乘函數這次是用 JScript 代碼編寫的

  // 計算階乘的函數如果傳遞了// 無效的數值(例如小於零)// 將返回 表明發生了錯誤若數值有效// 把數值轉換為最相近的整數並// 返回階乘function factorial(aNumber) {   aNumber = Mathfloor(aNumber); // 如果這個數不是一個整數則向下捨入if (aNumber < ) { // 如果這個數小於 拒絕接收return ;}if (aNumber == ) { // 如果為 則其階乘為 return ;}else return (aNumber * factorial(aNumber )); // 否則遞歸直至完成}

  變量范圍

  JScript 有兩種變量范圍全局和局部如果在任何函數定義之外聲明了一個變量則該變量為全局變量且該變量的值在整個持續范圍內都可以訪問和修改如果在函數定義內聲明了一個變量則該變量為局部變量每次執行該函數時都會創建和破壞該變量且它不能被該函數外的任何事物訪問

  像C++這樣的語言也有塊范圍在這裡任何一對{}都定義新的范圍JScript 不支持塊范圍

  一個局部變量的名稱可以與某個全局變量的名稱相同但這是完全不同和獨立的兩個變量因此更改一個變量的值不會影響另一個變量的值在聲明局部變量的函數內只有該局部變量有意義

[]  []  


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20690.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.