JavaScript中的高級特性及特別對象、屬性和方法

JavaScript中的高級特性及特別對象、屬性和方法


一,編寫構造函數
可以使用 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; // 計算圓面積
}
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    "; // 有空格的字符串
window.alert(s + " (" + s.length + ")");
s = s.trim();                                  // 刪除前後空格
window.alert(s + " (" + s.length + ")");



三,特別對象、屬性和方法
-------------------
Error 對象:保存有關錯誤的信息。

var newErrorObj = new Error()

var newErrorObj = new Error(
  number
)

var newErrorObj = new Error(
  number,
  description
)

Error 對象的構造函數語法有以下部分: 

參數:-number。與錯誤相聯的數字值。如果省略則爲零。
      -description。描述錯誤的簡短字符串。如果省略則爲空字符串。

說明:每當產生運行時錯誤,就產生 Error 對象的一個實例以描述錯誤。該實例有兩個固有屬性保存錯誤的描述(description 屬性)和錯誤號(number 屬性)。

錯誤號是 32 位的值。高 16 位字是設備代碼,而低字是實際的錯誤代碼。

Error 對象也可以用如上所示的語法顯式創建,或用 throw 語句拋掉。在兩種情況下,都可以添加選擇的任何屬性,以拓展 Error 對象的能力。

典型地,在 try...catch 語句中創建的局部變量引用隱式創建的 Error 對象。因此,可以按選擇的任何方法使用錯誤號和描述。

下面的例子演示了隱式創建 Error 對象的使用:
try { 
  x = y;                             // 產生錯誤。
} catch(e) {                         // 創建局部變量 e。
  response.write(e)                  // 打印 "[object Error]".
  response.write(e.number & 0xFFFF)  // 打印 5009。
  response.write(e.description)      // 打印 "'y' is undefined".
}


-------------------
Function 對象:創建新的函數。

語法 1
function functionName([argname1 [, ...[, argnameN]]]) {
   //body
}

語法 2
functionName = new Function( [argname1, [... argnameN,]] body );

參數:-functionName。必選項。最新創建函數的名稱
      -argname1...argnameN。可選項。函數接收的參數列表。
      -body。可選項。包含調用該函數時被執行的 JScript 代碼塊的字符串。

說明:函數 JScript 中的基本數據類型。語法 1 創建在必要時由 JScript 轉換爲 Function 對象的函數值。JScript 在調用函數時將用語法 2 創建的函數轉換爲 Fnction 對象。 

語法 1 是 JScript 中創建函數的基本方法。語法 2 是用於顯式創建函數對象的另一方法。 

例如,要創建將傳遞給它的兩個參數相加的函數,可以用兩種方法中的任一種完成: 

例子 1
function add(x, y) {
  return(x + y);            // 執行加法並返回結果。
}
例子 2
var add = new Function("x", "y", "return(x+y)");
在兩種情況下,都可以用如下代碼行調用該函數: 

add(2, 3);
注意   在調用函數時,請確保包含了括號和必需的參數。調用函數時不用括號導致返回函數的文本而不是函數執行的結果。


-------------------
Object 對象:提供所有 JScript 對象通用的功能。

obj = new Object([value]) 

參數:-obj。必選項。要賦值爲 Object 對象的變量名。
      -value。可選項。任意一種 JScript 基本數據類型。(Number、Boolean、或 String。)如果 value 爲一個對象,返回不作改動的該對象。如果 value 爲 null、undefined,或者沒有給出,則產生沒有內容的對象。

說明:Object 對象被包含在所有其它 JScript 對象中;在所有其它對象中它的方法和屬性都是可用的。在用戶定義的對象中可以重定義這些方法,並在適當的時候通過 JScript 調用。toString 方法是經常被重定義的 Object 方法的例子。



-------------------
arguments 屬性:爲當前執行的 function 對象返回一個arguments 對象。

function.arguments

function 參數是當前執行函數的名稱,可以省略。 

說明:通過 arguments 屬性,函數可以處理可變數量的參數。 arguments 對象的 length 屬性包含了傳遞給函數的參數的數目。對於arguments 對象所包含的單個參數,其訪問方法與數組中所包含的參數的訪問方法相同。

示例:下面的例子說明了 arguments 屬性的用法:

function ArgTest() {
   var i, s, numargs = arguments.length;
   s = numargs;  
   if (numargs < 2)
     s += " argument was passed to ArgTest. It was ";
   else
     s += " arguments were passed to ArgTest. They were " ;
   for (i = 0; i < numargs; i++) {
     s += arguments[i] + " ";
   }
   return(s);
}


-------------------
callee 屬性:返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文。

[function.]arguments.callee

可選項 function 參數是當前正在執行的 Function 對象的名稱。 

說明:callee 屬性是 arguments 對象的一個成員,僅當相關函數正在執行時纔可用。

callee 屬性的初始值就是正被執行的 Function 對象。這允許匿名的遞歸函數。

示例:
function factorial(n) {
 if (n <= 0)
   return 1;
 else
  return n * arguments.callee(n - 1)
}
print(factorial(3));

要求:版本5.5或以上。


-------------------
caller 屬性:返回一個對函數的引用,該函數調用了當前函數。

functionName.caller 

functionName 對象是所執行函數的名稱。

說明:對於函數來說,caller 屬性只有在函數執行時纔有定義。 如果函數是由 JScript 程序的頂層調用的,那麼 caller 包含的就是 null 。

如果在字符串上下文中使用 caller 屬性,那麼結果和 functionName.toString 一樣,也就是說,顯示的是函數的反編譯文本。

下面的例子說明了 caller 屬性的用法:
function CallLevel() {
  if (CallLevel.caller == null)
    return("CallLevel was called from the top level.");
  else
    return("CallLevel was called by another function.");
}


-------------------
constructor 屬性:表示創建對象的函數。 

object.constructor

必需的 object是對象或函數的名稱。 

說明:constructor 屬性是所有具有 prototype 的對象的成員。它們包括除 Global 和 Math 對象以外的所有 JScript 固有對象。constructor 屬性保存了對構造特定對象實例的函數的引用。 

例如: 
x = new String("Hi");
if (x.constructor == String) // 進行處理(條件爲真)。
或 
function MyFunc {
   // 函數體。
}
y = new MyFunc;
if (y.constructor == MyFunc) // 進行處理(條件爲真)。


-------------------
description 屬性:返回或設置與特定錯誤相聯繫的描述字符串。

object.description [= stringExpression]

description 屬性的語法組成部分如下:

參數:-object。必選項。Error 對象的任意實例。
      -stringExpression。可選項。包含錯誤描述的字符串表達式。

說明:description 屬性包含與特定錯誤相聯繫的錯誤信息字符串。使用包含在這個中的值,來警告用戶發生了一個不能或不想處理的錯誤。


-------------------
prototype 屬性:返回對象類型原型的引用。

objectName.prototype

objectName 參數是對象的名稱。 

說明:用 prototype 屬性提供對象的類的一組基本功能。 對象的新實例“繼承”賦予該對象原型的操作。 

例如,要爲 Array 對象添加返回數組中最大元素值的方法。 要完成這一點,聲明該函數,將它加入 Array.prototype, 並使用它。 

function array_max( ) {
  var i, max = this[0];
  for (i = 1; i < this.length; i++) {
    if (max < this[i])
      max = this[i];
  }
  return max;
}
Array.prototype.max = array_max;
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max( );
該代碼執行後,y 保存數組 x 中的最大值,或說 6。

所有 JScript 固有對象都有隻讀的 prototype 屬性。可以象該例中那樣爲原型添加功能,但該對象不能被賦予不同的原型。然而,用戶定義的對象可以被賦給新的原型。



-------------------
apply 方法:應用某一對象的一個方法,用另一個對象替換當前對象。

apply([thisObj[,argArray]])

參數:-thisObj。可選項。將被用作當前對象的對象。
      -argArray。可選項。將被傳遞給該函數的參數數組。

說明:如果 argArray 不是一個有效的數組或者不是 arguments 對象,那麼將導致一個 TypeError。

如果沒有提供 argArray 和 thisObj 任何一個參數,那麼 Global 對象將被用作 thisObj, 並且無法被傳遞任何參數。

要求:版本5.5或以上。


-------------------
call 方法:調用一個對象的一個方法,以另一個對象替換當前對象。

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

參數:-thisObj。可選項。將被用作當前對象的對象。
      -arg1, arg2,  , argN。可選項。將被傳遞方法參數序列。

說明:call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變爲由 thisObj 指定的新對象。

如果沒有提供 thisObj 參數,那麼 Global 對象被用作 thisObj。

要求:版本5.5或以上。


-------------------
concat 方法 (Array):返回一個新數組,這個新數組是由兩個或更多數組組合而成的。

array1.concat([item1[, item2[, . . . [, itemN]]]])

參數:-array1。必選項。其他所有數組要進行連接的 Array 對象。 
      -item1,. . ., itemN。可選項。要連接到 array1 末尾的其他項目。

說明:concat 方法返回一個 Array 對象,其中包含了 array1 和提供的任意其他項目的連接。

要加的項目(item1 … itemN)會按照從左到右的順序添加到數組。如果某一項爲數組,那麼添加其內容到 array1 的末尾。如果該項目不是數組,就將其作爲單個的數組元素添加到數組的末尾。

以下爲從源數組複製元素到結果數組: 

對於從正被連接到新數組的數組中複製的對象參數,複製後仍然指向相同的對象。不論新數組和源數組中哪一個有改變,都將引起另一個的改變。 
對於連接到新數組的數值或字符串,只複製其值。一個數組中值有改變並不影響另一個數組中的值。 

示例:下面這個例子說明了使用數組時 concat 方法的用法: 
function ConcatArrayDemo() {
  var a, b, c, d;
  a = new Array(1,2,3);
  b = "JScript";
  c = new Array(42, "VBScript);
  d = a.concat(b, c);  // 返回數組 [1, 2, 3, "JScript", 42, "VBScript"]
  return(d);
}


-------------------
escape 方法:對 String 對象編碼以便它們能在所有計算機上可讀。

escape(charString)

必選項 charstring 參數是要編碼的任意 String 對象或文字。 

說明:escape 方法返回一個包含了 charstring 內容的字符串值( Unicode 格式)。所有空格、標點、重音符號以及其他非 ASCII 字符都用 %xx 編碼代替,其中 xx 等於表示該字符的十六進制數。例如,空格返回的是 "%20" 。

字符值大於 255 的以 %uxxxx 格式存儲。 

注意:escape 方法不能夠用來對統一資源標示碼 (URI) 進行編碼。對其編碼應使用 encodeURI 和encodeURIComponent 方法。


-------------------
unescape 方法:解碼用 escape 方法進行了編碼的 String 對象。 

unescape(charstring) 

必選項 charstring 參數是要解碼的 String 對象。 

說明:unescape 方法返回一個包含 charstring 內容的字符串值。所有以 %xx 十六進制形式編碼的字符都用 ASCII 字符集中等價的字符代替。 

以 %uxxxx 格式(Unicode 字符)編碼的字符用十六進制編碼 xxxx 的 Unicode 字符代替。 

注意:unescape 方法不能用於解碼統一資源標識碼 (URI)。解該碼可使用 decodeURI 和 decodeURIComponent 方法。


-------------------
eval 方法:檢查 JScript 代碼並執行。

eval(codeString)

必選項 codestring 參數是包含有效 JScript 代碼的字符串值。這個字符串將由 JScript 分析器進行分析和執行。

說明:eval 函數允許 JScript 源代碼的動態執行。例如,下面的代碼創建了一個包含 Date 對象的新變量 mydate :

eval("var mydate = new Date();");

傳遞給 eval 方法的代碼執行時的上下文和調用 eval 方法的一樣. 


-------------------
encodeURI 方法:將文本字符串編碼爲一個有效的統一資源標識符 (URI)。

encodeURI(URIString)

必選的 URIString 參數代表一個已編碼的 URI。

說明:encodeURI 方法返回一個編碼的 URI。如果您將編碼結果傳遞給 decodeURI,那麼將返回初始的字符串。encodeURI 方法不會對下列字符進行編碼:":"、"/"、";" 和 "?"。請使用 encodeURIComponent 方法對這些字符進行編碼。

要求:版本5.5或以上。


-------------------
decodeURI 方法:返回一個已編碼的統一資源標識符 (URI) 的非編碼形式。

decodeURI(URIstring)

必要的 URIstring 參數代表一個已編碼 URI 的值。

說明:使用 decodeURI 方法代替已經過時的 unescape 方法。

decodeURI 方法返回一個字符串值。

如果 URIString 無效,那麼將產生一個 URIError。

要求:版本5.5或以上。


-------------------
encodeURIComponent 方法:將文本字符串編碼爲一個統一資源標識符 (URI) 的一個有效組件。

encodeURIComponent(encodedURIString)

必選的 encodedURIString 參數代表一個已編碼的 URI 組件。

說明:encodeURIComponent 方法返回一個已編碼的 URI。如果您將編碼結果傳遞給 decodeURIComponent,那麼將返回初始的字符串。因爲 encodeURIComponent 方法對所有的字符編碼,請注意,如果該字符串代表一個路徑,例如 /folder1/folder2/default.html,其中的斜槓也將被編碼。這樣一來,當該編碼結果被作爲請求發送到 web 服務器時將是無效的。如果字符串中包含不止一個 URI 組件,請使用 encodeURI 方法進行編碼。

要求:版本5.5或以上。


-------------------
decodeURIComponent 方法:返回統一資源標識符 (URI) 的一個已編碼組件的非編碼形式。

decodeURIComponent(encodedURIString)

必選的 encodedURIString 參數代表一個已編碼的 URI 組件。

說明:URIComponent 是一個完整的 URI 的一部分。 

如果 encodedURIString 無效,將產生一個 URIError。

要求:版本5.5或以上。


-------------------
for...in 語句:對應於一個對象的每個,或一個數組的每個元素,執行一個或多個語句。 

for (variable in [object | array])
   statements 

參數:-variable。必選項。一個變量,它可以是 object 的任一屬性或 array 的任一元素。 
      -object, array。可選項。要在其上遍歷的對象或數組。
      -statement。可選項。相對於 object 的每個屬性或 array 的每個元素,都要被執行的一個或多個語句。可以是複合語句。

說明:在循環的每次迭代前,variable 被賦予 object 的下一個屬性或 array 的下一個元素。然後可以在循環內的任一語句中使用它,就好像正在使用 object 的該屬性或 array 的該元素一樣。

當在一個對象上迭代時,沒有辦法決定或控制把對象的成員賦給 variable 的次序。在數組內將按元素的次序執行迭代,也就是,0、1、2、......

示例:下面示例說明了 for ... in 語句的用法,它把一個對象用作一個聯合數組: 
function ForInDemo() {
  var a, key, s = "";                                     // 創建某些變量
  a = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"}  // 初始化對象
  for (key in a)   {                                      // 迭代屬性
     s += a[key] + "<BR/>";
  }
  return(s);
}


-------------------
join 方法:返回字符串值,其中包含了連接到一起的數組的所有元素,元素由指定的分隔符分隔開來。

arrayObj.join(separator)

參數:-arrayObj。必選項。Array 對象。
      -separator。必選項。是一個 String 對象,作爲最終的 String 對象中對數組元素之間的分隔符。如果省略了這個參數,那麼數組元素之間就用一個逗號來分隔。

說明:如果數組中有元素沒有定義或者爲 null,將其作爲空字符串處理。

示例:下面這個例子說明了 join 方法的用法。 
function JoinDemo() {
  var a, b;
  a = new Array(0,1,2,3,4);
  b = a.join("-");
  return(b);
}


-------------------
pop 方法:移除數組中的最後一個元素並返回該元素。

arrayObj.pop( )

必選的 arrayObj 引用是一個 Array 對象。

說明:如果該數組爲空,那麼將返回 undefined。

要求:版本5.5或以上。


-------------------
push 方法:將新元素添加到一個數組中,並返回數組的新長度值。

arrayObj.push([item1 [item2 [. . . [itemN ]]]])

參數:-arrayObj。必選項。一個 Array 對象。
      -item, item2,. . . itemN。可選項。該 Array 的新元素。

說明:push 方法將以新元素出現的順序添加這些元素。如果參數之一爲數組,那麼該數組將作爲單個元素添加到數組中。如果要合併兩個或多個數組中的元素,請使用 concat 方法。

要求:版本5.5或以上。


-------------------
reverse 方法:返回一個元素順序被反轉的 Array 對象。 

arrayObj.reverse( )

必選項 arrayObj 參數爲 Array 對象。

說明:reverse 方法將一個 Array 對象中的元素位置進行反轉。在執行過程中,這個方法並不會創建一個新的 Array 對象。 

如果數組是不連續的,reverse 方法將在數組中創建元素以便填充數組中的間隔。這樣所創建的全部元素的值都是 undefined。

示例:下面這個例子說明了 reverse 方法的用法: 
function ReverseDemo() {
  var a, l;                  // 聲明變量。
  a = new Array(0,1,2,3,4);  // 創建數組並賦值。
  l = a.reverse();           // 反轉數組的內容。
  return(l);                 // 返回結果數組。
}


-------------------
slice 方法 (Array):返回一個數組的一段。

arrayObj.slice(start, [end]) 

參數:-arrayObj。必選項。一個 Array 對象。 
      -start。必選項。arrayObj 中所指定的部分的開始元素是從零開始計算的下標。 
      -end。可選項。arrayObj 中所指定的部分的結束元素是從零開始計算的下標。

說明:slice 方法返回一個 Array 對象,其中包含了 arrayObj 的指定部分。 

slice 方法一直複製到 end 所指定的元素,但是不包括該元素。如果 start 爲負,將它作爲 length + start處理,此處 length 爲數組的長度。如果 end 爲負,就將它作爲 length + end 處理,此處 length 爲數組的長度。如果省略 end ,那麼 slice 方法將一直複製到 arrayObj 的結尾。如果 end 出現在 start 之前,不復制任何元素到新數組中。

示例:在下面這個例子中,除了最後一個元素之外,myArray 中所有的元素都被複制到 newArray 中: 

newArray = myArray.slice(0, -1)


-------------------
shift 方法:移除數組中的第一個元素並返回該元素。

arrayObj.shift( )

必選的 arrayObj 引用是一個 Array 對象。

說明:shift 方法可移除數組中的第一個元素並返回該元素。

要求:版本5.5或以上。


-------------------
unshift 方法:將指定的元素插入數組開始位置並返回該數組。

arrayObj.unshift([item1[, item2 [, . . . [, itemN]]]])

參數:-arrayObj。必選項。一個 Array 對象。
      -item1, item2,. . .,itemN。可選項。將插入到該 Array 開始部分的元素。

說明:unshift 方法將這些元素插入到一個數組的開始部分,所以這些元素將以參數序列中的次序出現在數組中。

要求:版本5.5或以上。


-------------------
splice 方法:從一個數組中移除一個或多個元素,如果必要,在所移除元素的位置上插入新元素,返回所移除的元素。

arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])

參數:-arrayObj。必選項。一個 Array 對象。
      -start。必選項。指定從數組中移除元素的開始位置,這個位置是從 0 開始計算的。
      -deleteCount。必選項。要移除的元素的個數。
      -item1, item2,. . .,itemN。必選項。要在所移除元素的位置上插入的新元素。

說明:splice 方法可以移除從 start 位置開始的指定個數的元素並插入新元素,從而修改 arrayObj。返回值是一個由所移除的元素組成的新 Array 對象。

要求:版本5.5或以上。

發佈了674 篇原創文章 · 獲贊 7 · 訪問量 561萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章