亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

編寫高級JScript應用代碼

2019-11-18 11:17:13
字體:
來源:轉載
供稿:網友
 1、創建高級對象
  使用構造函數來創建對象
  構造函數是一個函數,調用它來例示并初始化非凡類型的對象??梢允褂?nbsp;new 要害字來調用一個構造函數。下面給出了使用構造函數的新示例。

var myObject = new Object();             // 創建沒有屬性的通用對象。
var myBirthday = new Date(1961, 5, 10);  // 創建一個 Date 對象。
var myCar = new Car();                   // 創建一個用戶定義的對象,并初始化其屬性。
  通過構造函數將一個參數作為特定的 this 要害字的值傳遞給新創建的空對象。然后構造函數負責為新對象執行適應的初始化(創建屬性并給出其初始值)。完成后,構造函數返回它所構造的對象的一個參數。

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

function Circle (XPoint, yPoint, radius) {
    this.x = xPoint;  // 圓心的 x 坐標。
    this.y = yPoint;  // 圓心的 y 坐標。
    this.r = radius;  // 圓的半徑。
}
  調用 Circle 構造函數時,給出圓心點的值和圓的半徑(所有這些元素是完全定義一個獨特的圓對象所必需的)。結束時 Circle 對象包含三個屬性。下面是如何例示 Circle 對象。

var aCircle = new Circle(5, 11, 99);
  使用原型來創建對象
  在編寫構造函數時,可以使用原型對象(它本身是所有構造函數的一個屬性)的屬性來創建繼續屬性和共享方法。原型屬性和方法將按引用復制給類中的每個對象,因此它們都具有相同的值??梢栽谝粋€對象中 更改原型屬性的值,新的值將覆蓋默認值,但僅在該實例中有效。屬于這個類的其他對象不受此更改的影響。下面給出了使用自定義構造函數的示例,Circle(注重 this 要害字的使用)。

Circle.PRototype.pi = Math.PI;
function ACirclesArea () {
    return this.pi * this.r * this.r; // 計算圓面積的公式為 ?r2。
}
Circle.prototype.area = ACirclesArea; // 計算圓面積的函數現在是 Circle Prototype 對象的一個方法。
var a = ACircle.area();               // 此為如何在 Circle 對象上調用面積函數。
  使用這個原則,可以給預定義的構造函數(都具有原型對象)定義附加屬性。例如,假如想要能夠刪除字符串的前后空格(與 VBScript 的 Trim 函數類似),就可以給 String 原型對象創建自己的方法。

// 增加一個名為 trim 的函數作為
// String 構造函數的原型對象的一個方法。
String.prototype.trim = function()
{
    // 用正則表達式將前后空格
    // 用空字符串替代。
    return this.replace(/(^/s*)(/s*$)/g, "");
}

// 有空格的字符串
var s = "    leading and trailing spaces    ";

// 顯示 "    leading and trailing spaces     (35)"
window.alert(s + " (" + s.length + ")");

// 刪除前后空格
s = s.trim();
// 顯示"leading and trailing spaces (27)"
window.alert(s + " (" + s.length + ")");

  2.遞歸
  遞歸是一種重要的編程技術。該方法用于讓一個函數從其內部調用其自身。一個示例就是計算階乘。0 的階乘被非凡地定義為 1。 更大數的階乘是通過計算 1 * 2 * ...來求得的,每次增加 1,直至達到要計算其階乘的那個數。

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

  “假如這個數小于零,則拒絕接收。假如不是一個整數,則將其向下舍入為相鄰的整數。假如這個數為 0,則其階乘為 1。假如這個數大于 0,則將其與相鄰較小的數的階乘相乘?!?br />
  要計算任何大于 0 的數的階乘,至少需要計算一個其他數的階乘。用來實現這個功能的函數就是已經位于其中的函數;該函數在執行當前的這個數之前,必須調用它本身來計算相鄰的較小數的階乘。這就是一個遞歸示例。

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

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

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

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

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

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

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

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

var aCentaur = "a horse with rider,";  // aCentaur 的全局定義。

// JScript 代碼,為簡潔起見有省略。
function antiquities()  // 在這個函數中聲明了一個局部 aCentaur 變量。
{

// JScript 代碼,為簡潔起見有省略。
var aCentaur = "A centaur is probably a mounted Scythian warrior";

// JScript 代碼,為簡潔起見有省略。
   aCentaur += ", misreported; that is, ";  // 添加到局部變量。

// JScript 代碼,為簡潔起見有省略。
}  // 函數結束。

var nothinginparticular = antiquities();
aCentaur += " as seen from a distance by a naive innocent.";

/*
  在函數內,該變量的值為 "A centaur is probably a mounted Scythian warrior,
misreported; that is, ";在函數外,該變量的值為這句話的其余部分:
"a horse with rider, as seen from a distance by a naive innocent."
*/  
  很重要的一點是注重變量是否是在其所屬范圍的開始處聲明的。有時這會導致意想不到的情況。 

tweak();
var aNumber = 100;
function tweak()  {
var newThing = 0;  // 顯式聲明 newThing 變量。

    // 本語句將未定義的變量賦給 newThing,因為已有名為 aNumber 的局部變量。
    newThing = aNumber;

    //下一條語句將值 42 賦給局部的 aNumber。aNumber = 42;
if (false)  {
    var aNumber;  // 該語句永遠不會執行。
    aNumber = 123;  //  該語句永遠不會執行。
    }  // 條件語句結束。

}  // 該函數定義結束。
  當 JScript 運行函數時,首先查找所有的變量聲明,

var someVariable;
  并以未定義的初始值創建變量。假如變量被聲明時有值,

var someVariable = "something";
  那么該變量仍以未定義的值初始化,并且只有在運行了聲明行時才被聲明值取代,假如曾經被聲明過。

  JScript 在運行代碼前處理變量聲明,所以聲明是位于一個條件塊中還是其他某些結構中無關緊要。JScript 找到所有的變量后立即運行函數中的代碼。假如變量是在函數中顯式聲明的 ? 也就是說,假如它出現于賦值表達式的左邊但沒有用 var 聲明 ? 那么將把它創建為全局變量。
復制、傳遞和比較數據
  在 JScript 中,對數據的處理取決于該數據的類型。 

  按值和按引用的比較
  Numbers 和 Boolean 類型的值 (true 和 false) 是按值來復制、傳遞和比較的。當按值復制或傳遞時,將在計算機內存中分配一塊空間并將原值復制到其中。然后,即使更改原來的值,也不會影響所復制的值(反過來也一樣),因為這兩個值是獨立的實體。

  對象、數組以及函數是按引用來復制、傳遞和比較的。 當按地址復制或傳遞時,實際是創建一個指向原始項的指針,然后就像拷貝一樣來使用該指針。假如隨后更改原始項,則將同時更改原始項和復制項(反過來也一樣)。實際上只有一個實體;“復本”并不是一個真正的復本,而只是該數據的又一個引用。

  當按引用比較時,要想比較成功,兩個變量必須參照完全相同的實體。例如,兩個不同的 Array 對象即使包含相同的元素也將比較為不相等。要想比較成功,其中一個變量必須為另一個的參考。要想檢查兩個數組是否包含了相同的元素,比較 toString() 方法的結果。

  最后,字符串是按引用復制和傳遞的,但是是按值來比較的。請注重,假如有兩個 String 對象(用 new String("something") 創建的),按引用比較它們,但是,假如其中一個或者兩者都是字符串值的話,按值比較它們。

  注重   鑒于 ASCII和 ANSI 字符集的構造方法,按序列順序大寫字母位于小寫字母的前面。例如 "Zoo" 小于 "aardvark"。假如想執行不區分大小寫的匹配,可以對兩個字符串調用 toUpperCase() 或 toLowerCase()。

  傳遞參數給函數
按值傳遞一個參數給函數就是制作該參數的一個獨立復本,即一個只存在于該函數內的復本。即使按引用傳遞對象和數組時,假如直接在函數中用新值覆蓋原先的值,在函數外并不反映新值。只有在對象的屬性或者數組的元素改變時,在函數外才可以看出。

例如(使用 IE 對象模式):

// 本代碼段破壞(覆蓋)其參數,所以
// 調用代碼中反映不出變化。
function Clobber(param) 
{
    // 破壞參數;在調用代碼中
    // 看不到。
    param = new Object();
    param.message = "This will not work";
}

// 本段代碼改變參數的屬性,
// 在調用代碼中可看到屬性改變。
function Update(param)
{
    // 改變對象的屬性;
    // 可從調用代碼中看到改變。
    param.message = "I was changed";
}

// 創建一個對象,并賦給一個屬性。
var obj = new Object();
obj.message = "This is the original";

// 調用 Clobber,并輸出 obj.message。注重,它沒有發生變化。
Clobber(obj);
window.alert(obj.message); // 仍然顯示 "This is the original"。

// 調用 Update,并輸出 obj.message。注重,它已經被改變了。
Update(obj);
window.alert(obj.message); // 顯示 "I was changed"。
  檢驗數據
  當按值進行檢驗時,是比較兩個截然不同的項以查看它們是否相等。通常,該比較是逐字節進行的。當按引用進行檢驗時,是看這兩項是否是指向同一個原始項的指針。假如是,則比較結果是相等;假如不是,即使它們每個字節都包含完全一樣的值,比較結果也為不相等。

  按引用復制和傳遞字符串能節約內存;但是由于在字符串被創建后不能進行更改,因此可以按值進行比較。這樣可以檢查兩個字符串是否包含相同的內容,即使它們是完全獨立產生的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合久久中文字幕综合网小说| 一区二区亚洲欧洲国产日韩| 一区二区亚洲精品国产| 国产精品国模在线| 日韩av免费在线观看| 久久久久久久久综合| 欧美日在线观看| 国产精品久久久久久av福利软件| 亚洲精品久久久久中文字幕二区| 欧美成人高清视频| 久久免费国产视频| 欧美成人一二三| 亚洲精品美女久久久久| 欧美在线免费看| 91免费在线视频| 国产伦精品一区二区三区精品视频| 欧美性xxxxxxxxx| 欧美黑人xxxⅹ高潮交| 欧洲日韩成人av| 日韩精品在线观看一区| 国产精品女主播视频| 久久久久女教师免费一区| 国产精品嫩草影院一区二区| 中国日韩欧美久久久久久久久| 91精品国产99久久久久久| 欧美成人精品一区二区| 日韩美女视频中文字幕| 精品色蜜蜜精品视频在线观看| 亚洲精品国产综合久久| 91精品国产高清自在线| 欧美第一页在线| 国产亚洲xxx| 在线成人激情黄色| 国产精品一区二区在线| 国产一区av在线| 日韩免费看的电影电视剧大全| 在线视频精品一| 欧美激情网站在线观看| 欧美日韩成人网| 成人精品在线视频| 欧美一区三区三区高中清蜜桃| 亚洲国产精品成人va在线观看| 亚洲日韩中文字幕在线播放| 91社影院在线观看| 亚洲黄色片网站| 久久亚洲春色中文字幕| 懂色av影视一区二区三区| 日韩黄在线观看| 5566成人精品视频免费| 久久久久久香蕉网| 亲爱的老师9免费观看全集电视剧| 色妞久久福利网| 中文字幕日韩欧美精品在线观看| 69影院欧美专区视频| www国产精品com| 亚洲国产欧美日韩精品| 亚洲精品电影在线观看| 久久久久北条麻妃免费看| 亚洲国产日韩精品在线| 国产精品亚洲第一区| 亚洲欧洲在线看| 国产精品视频导航| 亚洲色图第一页| 中文字幕日韩欧美在线| 欧美激情第三页| 欧美黑人视频一区| 国产精品夜色7777狼人| 91亚洲永久免费精品| 国产精品成久久久久三级| 日本久久91av| 亚洲精品免费一区二区三区| 欧美大荫蒂xxx| 久久人人爽人人| 亚洲成人国产精品| 欧美中文在线视频| 最近2019年手机中文字幕| 色综合影院在线| 都市激情亚洲色图| 欧美插天视频在线播放| 欧美国产精品va在线观看| 亚洲电影免费观看高清完整版在线观看| 国产日韩在线一区| 在线观看国产精品日韩av| 日韩欧美精品网址| 亚洲欧洲xxxx| 国产成人+综合亚洲+天堂| 欧美精品一区三区| 91精品国产乱码久久久久久蜜臀| 国产高清在线不卡| 在线成人中文字幕| 国产不卡一区二区在线播放| 欧美激情网站在线观看| 91久久国产婷婷一区二区| 国产午夜一区二区| 欧美一区二区三区免费观看| 欧美在线视频一区二区| 自拍偷拍亚洲在线| 久久九九精品99国产精品| 亚洲国产精品999| 97视频免费在线观看| 国产91在线播放| 久久亚洲国产精品| 日韩一区二区三区在线播放| 最新91在线视频| 亚洲女性裸体视频| 亚洲欧美制服丝袜| 欧美黑人性猛交| 久久久久久国产精品三级玉女聊斋| 久久久在线免费观看| 欧美高清在线观看| 精品一区二区三区四区| 欧美精品一本久久男人的天堂| 黄网站色欧美视频| 一道本无吗dⅴd在线播放一区| 欧美性xxxxx极品娇小| 一区二区三区在线播放欧美| 国产精品欧美激情| 欧美成年人视频网站| 中文字幕亚洲国产| 欧美激情视频播放| 91超碰中文字幕久久精品| 亚洲老头老太hd| 久热在线中文字幕色999舞| 欧洲成人在线视频| 96国产粉嫩美女| 欧美日韩在线视频一区| 热草久综合在线| 国产欧美欧洲在线观看| 精品久久久久久| 亚洲国产日韩欧美综合久久| 亚洲视频在线观看免费| 精品中文字幕视频| 啊v视频在线一区二区三区| 中文字幕v亚洲ⅴv天堂| 北条麻妃99精品青青久久| 欧美在线激情网| 国产人妖伪娘一区91| 欧美成人合集magnet| 成人做爰www免费看视频网站| 久久亚洲精品成人| 亚洲成人三级在线| 国产精品久久久久久久久免费| 国产一区二区三区18| 亚洲欧洲免费视频| 国产免费一区二区三区在线观看| 国产精品流白浆视频| 成人午夜激情免费视频| 亚洲精品国产品国语在线| 亚洲综合成人婷婷小说| 国产亚洲精品久久久久久| 欧美激情视频一区| 色综合91久久精品中文字幕| 午夜精品福利在线观看| 日韩在线观看视频免费| 日韩欧美极品在线观看| 91高清视频免费| 亚洲第一天堂av| 国产欧美久久一区二区| 色综合天天狠天天透天天伊人| 中文欧美在线视频| 亚洲人精选亚洲人成在线| 日韩在线视频观看正片免费网站| 国产精品视频yy9099| 成人福利在线视频|