diff options
author | Florian Merz <me@fiji-flo.de> | 2021-02-11 13:12:08 +0100 |
---|---|---|
committer | Florian Merz <me@fiji-flo.de> | 2021-02-11 13:12:08 +0100 |
commit | 43a5cac2eff22c21071800e13bef12af9d3a37d0 (patch) | |
tree | f6e91f8aa958f15bd0b0aabf7b8dfc09063eceda /files/zh-tw/orphaned/web | |
parent | 8260a606c143e6b55a467edf017a56bdcd6cba7e (diff) | |
download | translated-content-43a5cac2eff22c21071800e13bef12af9d3a37d0.tar.gz translated-content-43a5cac2eff22c21071800e13bef12af9d3a37d0.tar.bz2 translated-content-43a5cac2eff22c21071800e13bef12af9d3a37d0.zip |
unslug zh-tw: move
Diffstat (limited to 'files/zh-tw/orphaned/web')
47 files changed, 2886 insertions, 0 deletions
diff --git a/files/zh-tw/orphaned/web/css/border-image/border-image/index.html b/files/zh-tw/orphaned/web/css/border-image/border-image/index.html new file mode 100644 index 0000000000..210a2663eb --- /dev/null +++ b/files/zh-tw/orphaned/web/css/border-image/border-image/index.html @@ -0,0 +1,111 @@ +--- +title: border-image +slug: Web/CSS/border-image/border-image +tags: + - CSS +--- +<h3 id="摘要">摘要</h3> + +<p>CSS 屬性 <code>border-image</code> 可以讓你在元素的邊框上擺上圖片。這讓呈現看似很複雜的一個網頁的小單元簡單很多,它可以省最多九個元素。</p> + +<div class="warning"><strong>緊告:</strong>官方的 CSS3 規範描述的 border-image 屬性在這個功能被凍結並出現在 Gecko 1.9.1 的釋出版之後改變很多。因此,這項功能的語法跟呈現方法很可能在未來 Gecko 的釋出版改變。特別是選擇性的 <code>border-width</code> 參數,它覆蓋既有 <code>border-width</code> 取值的這項特性已經從規範移除了,因此勢必也會在未來的 Gecko 被拿掉。</div> + +<p>瀏覽器會顯示 <code>border-image</code> 指定的圖片而不是 {{ cssxref("border-style") }} 給的邊框樣式,但是若它的取值是 <code>none</code> 或是因某些理由無法顯示該圖片,瀏覽器就會顯示邊框樣式。<code>border-image</code> 會畫一個額外的背景圖片在原來 {{ cssxref("background-image") }} 指 定的背景圖片之上。</p> + +<ul> + <li>{{ Xref_cssinitial() }}:{{ Cssxref("none") }}</li> + <li>對象:所有除了 {{ cssxref("border-collapse") }} 是 <code class="css">collapse</code> 的表格元素</li> + <li>{{ Xref_cssinherited() }}:否</li> + <li>媒體:{{ Xref_cssvisual() }}</li> + <li>{{ Xref_csscomputed() }}:任何 URI 變為絕對,任何 <長度> 變為絕對,其他如同所指定</li> +</ul> + +<h3 id="語法">語法</h3> + +<pre class="eval">none | + [ <圖片> [ <數字> | <百分比> ]{1,4} [/ <邊框寬度>{1,4}]? ] && [ stretch | repeat | round ]{0,2} </pre> + +<h3 id="取值">取值</h3> + +<dl> + <dt>none</dt> + <dd>不顯示圖片,使用邊框樣式。</dd> + <dt><圖片> <small>(必填)</small></dt> + <dd>圖片值是一個 {{cssxref("<uri>")}},例: <code class="plain"> url(http://example.org/image.png)</code> 。</dd> + <dt><數> | <百分比> <small>(必填)</small></dt> + <dd>一個、兩個、三個、四個分別代表從頂邊、右邊、底邊、左邊從圖片外圍到切圖線的距離,將圖片切為九塊:四個角、四個邊跟一個中間部份。<br> + <img alt="" src="/@api/deki/files/3683/=slice.png" style="float: right;"><br> + 一個值的話,該值用於圖片的全部四個邊。<br> + 兩個值得話,值用於:一、頂邊與底邊 二、右邊與左邊。<br> + 三個值的話,值用於:一、頂邊 二、右邊與左邊 三、底邊。<br> + 四個值的情況,四個值分邊用在圖片的頂邊、右邊、底邊、左邊。<br> + <br> + 在 Gecko 1.9.1 (Firefox 3.5) 圖片的中間那個部份會被當做元素的背景。這在未來的版本可能會改變。<br> + <br> + <strong>百分比</strong> 由圖片的長度/寬度計算。<br> + <strong>數</strong> 但表圖片的像素(若為點陣圖)或向量座標(若為 SVG)。</dd> + <dt><邊框寬度> <small>(選擇性)</small></dt> + <dd>如果斜線 <strong>/</strong> 出現在屬性值的話,一個、兩個、三個或是四個在它之後的取值會被當成是 {{ cssxref("border-width") }} 的取值使用。取值的順序如同 {{ cssxref("border-width") }} 。</dd> + <dt>stretch | round | repeat <small>(選擇性)</small></dt> + <dd>一個或兩個關鍵字,指定邊上的圖片跟中間部份要如何縮放及鋪擺。<br> + <strong><code>stretch</code></strong> (預設值)縮放該圖片,使其與配置大小相等。<br> + <strong><code>round</code></strong> 鋪擺該圖片,但也縮放它使得被配置範圍鋪滿整數張該圖片。<br> + <strong><code>repeat </code></strong>直接鋪擺該圖片。<br> + 第一個關鍵字的對象是頂邊,中間跟底邊的圖片,而第二個關鍵字的對象是左邊跟右邊的邊框。如果第二個不存在,則沿用第一個關鍵字的設定。如果兩者皆不存在,預設值為 <code> stretch</code>。</dd> +</dl> + +<h3 id="範例">範例</h3> + +<p>[這裡還需要一些活範例]</p> + +<pre>#header { -moz-border-image: url(border.png) 27 27 27 27 round round; } + +.button { -moz-border-image: url(button.png) 0 5 0 5; } + +.example { -moz-border-image: url(example.jpg) 3 4 6 8 / 10px 12px 14px 22px; } +</pre> + +<pre>/* 鮮見例,在 Firefox 3.5 下看起來像是完全伸展的 background-image */ + + div { -moz-border-image: url(bgimage.png) 0; } +</pre> + +<h3 id="瀏覽器兼容性">瀏覽器兼容性</h3> + +<table class="standard-table"> + <tbody> + <tr> + <th>瀏覽器</th> + <th>最小版本</th> + <th>支援</th> + </tr> + <tr> + <td>Internet Explorer</td> + <td>---</td> + <td>---</td> + </tr> + <tr> + <td>Firefox (Gecko)</td> + <td><strong>3.5</strong> (1.9.1)</td> + <td><code>-moz-border-image</code></td> + </tr> + <tr> + <td>Opera</td> + <td>10.5</td> + <td><code>border-image</code></td> + </tr> + <tr> + <td>Safari (WebKit)</td> + <td><strong>3.0</strong> (522)</td> + <td><code>-webkit-border-image</code></td> + </tr> + </tbody> +</table> + +<h3 id="規範">規範</h3> + +<ul> + <li><a class="external" href="http://www.w3.org/TR/css3-background/#border-images" title="http://www.w3.org/TR/css3-background/#border-images">CSS 3 背景與邊界模組 #border-image</a></li> +</ul> + +<p>{{ languages( { "en": "en/CSS/-moz-border-image"} ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/javascript_概要/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/javascript_概要/index.html new file mode 100644 index 0000000000..9c74f992c9 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/javascript_概要/index.html @@ -0,0 +1,43 @@ +--- +title: JavaScript 概要 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/JavaScript_概要 +--- +<p> </p> +<h3 id="什麼是_JavaScript?" name="什麼是_JavaScript?">什麼是 JavaScript?</h3> +<p>JavaScript 是跨平台、物件導向的 Script 語言。JavaScript 是小巧、輕量的語言,以單獨的語言來看 JavaScript 並不是很有用,不過 JavaScript 被設計成易於嵌入至其他產品和應用程式(如 Web 瀏覽器)。在宿主環境裡,JavaScript 可連接至由環境提供的可操控的物件。</p> +<p>核心 JavaScript 包含 <code>Array</code>、<code>Date</code>、<code>Math</code> 等等的物件核心組件,以及運算子、控制結構、語法等等的語言元素的核心組件。核心 JavaScript 可藉由追加額外的物件而為各種用途來做擴充,例如︰</p> +<ul> <li><em>客戶端 JavaScript</em> 藉由追加的物件擴充核心語言,以操控瀏覽器(Navigator 或其他 Web 瀏覽器)及其 Document Object Model (DOM)。例如,客戶端的擴充可讓應用程式在 HTML 表單上放置一些元素,並回應滑鼠點擊、表單輸入、頁面瀏覽等的使用者事件。</li> <li><em>伺服端 JavaScript</em> 藉由追加與執行在伺服器上的 JavaScript 有關的物件來擴充核心語言。例如,伺服端的擴充可讓應用程式與相關的資料庫通訊、提供從應用程式的一端發出至另一端的資訊的連續性、在伺服器上進行檔案管理。</li> +</ul> +<p>藉由 JavaScript 的 LiveConnect 的機能,還可讓 Java 和 JavaScript 的代碼互相通訊。你可以從 JavaScript 生成 Java 物件,並存取他們的公開方法和欄位。也可以從 Java 存取 JavaScript 的物件、屬性、方法。</p> +<p>Netscape 發明 JavaScript,且 JavaScript 是初次用於 Netscape 瀏覽器。</p> +<h3 id="JavaScript_和_Java" name="JavaScript_和_Java">JavaScript 和 Java</h3> +<p>JavaScript 和 Java 在某些方面類似,但在很多方面完全不同。JavaScript 語言很像 Java,但沒有 Java 的靜態類型和強固的類型檢查。JavaScript 支援 Java 的表達結構和基本的流程控制結構。</p> +<p>相對於 Java 藉由宣告來建構類別的編譯時期系統,JavaScript 支援的執行時期系統,是建立在表示為數值、布林、字串值的少數幾個資料類型。JavaScript 使用以原型為基礎的物件模型,以代替更常見的以類別為基礎的物件模型。以原型為基礎的模型可提供動態繼承,也就是可對個別的物件變更繼承。JavaScript 亦支援無須特別宣告的函數。函數可以是物件的屬性,以寬鬆的類型執行方法。</p> +<p>JavaScript 與 Java 相比,是一種在形式上要自由很多的語言。你不必宣告所有的變數、類別或方法。你不必關心方法是不是公開、私有或保護,你也不必實作界面。變數、參數和函數返回的類型都不是明確的類型。</p> +<p>Java 是為了快速執行和類型的安全性而設計的一種以類別為基礎的程式語言。類型的安全性的意義,舉例來說,你不能把 Java 的整數類型強制轉換為物件類型,或有意的誤用 Java 的位元碼來存取私有記憶體。Java 的以類別為基礎的模型的意義是程式完全以類別及其方法所組成。Java 的類別階層和強固的類型通常需要緊密結合的物件階層。這些要求使 Java 的程式設計比 JavaScript 編寫要複雜的多。</p> +<p>相較之下,JavaScript 繼承了像 HyperTalk、dBASE 那樣的小型動態類型語言的精髓。這些 Script 語言提供工具給更廣大的使用者,因為他們的語法簡單、特殊的內建函數、對物件的建立的要求較少。</p> +<table class="fullwidth-table"> <tbody> <tr> <th>JavaScript</th> <th>Java</th> </tr> <tr> <td>物件導向。物件的類型之間沒有區別。繼承是透過原型機制達成,屬性和方法可動態的加入至任何物件。</td> <td>以類別為基礎。物件可細分為類別和實體,所有的繼承是透過類別階層達成。類別和實體不可動態的加入屬性或方法。</td> </tr> <tr> <td>不必宣告變數的資料類型(動態類型)。</td> <td>必須宣告變數的資料類型(靜態類型)。</td> </tr> <tr> <td>不可自動的寫入硬碟。</td> <td>不可自動的寫入硬碟。</td> </tr> </tbody> +</table> +<p><small><strong>表 1.1: JavaScript 和 Java 的比較</strong></small><br> +<br> +JavaScript 和 Java 之間的不同的更進一步資訊,參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8#%E7%89%A9%E4%BB%B6%E6%A8%A1%E5%9E%8B%E7%9A%84%E7%B4%B0%E7%AF%80" title="zh tw/Core JavaScript 1.5 教學#物件模型的細節">物件模型的細節</a> 章節。</p> +<h3 id="JavaScript_和_ECMAScript_規範" name="JavaScript_和_ECMAScript_規範">JavaScript 和 ECMAScript 規範</h3> +<p>Netscape 發明 JavaScript,且 JavaScript 最先使用於 Netscape 瀏覽器。然而,Netscape 與 <a class="external" href="http://www.ecma-international.org/">Ecma International</a> - 把資訊和通訊系統標準化的歐洲協會(以前稱為 ECMA - European Computer Manufacturers Association;歐洲電腦製造商協會)合作發表一份以核心 JavaScript 為基礎的國際程式語言的標準化。JavaScript 的標準化版本,稱為ECMAScript,使所有支援標準的應用程式都能有同樣的行為。企業可以使用這份開放的語言標準開發他們的 JavaScript 實作產品。ECMAScript 標準的文件在 ECMA-262 規範中。</p> +<p>ECMA-262 標準也受到 <a class="external" href="http://www.iso.ch/">ISO</a>(International Organization for Standardization;國際標準化組織)認可成為 ISO-16262。你可以在 Mozilla 網站上找到 <a class="external" href="http://www.mozilla.org/js/language/E262-3.pdf">ECMA-262 的 PDF 版本</a>。你也可以在 <a class="external" href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">Ecma International 網站</a> 上找到這份標準。ECMAScript 標準並未提到 Document Object Model (DOM),DOM 是由 <a class="external" href="http://www.w3.org/">World Wide Web Consortium (W3C)</a> 所標準化。DOM 定義了在 Script 中處理 HTML 文件裡的物件的方法。</p> +<h4 id="JavaScript_版本和_ECMAScript_修定版之間的關係" name="JavaScript_版本和_ECMAScript_修定版之間的關係">JavaScript 版本和 ECMAScript 修定版之間的關係</h4> +<p>Netscape 與 Ecma International 緊密合作產生 ECMAScript 規範 (ECMA-262)。下表說明了 JavaScript 版本和 ECMAScript 版本間的關係。</p> +<table class="fullwidth-table"> <tbody> <tr> <th>JavaScript 的版本</th> <th>與 ECMAScript 修定版之間的關係</th> </tr> <tr> <td>JavaScript 1.1</td> <td>ECMA-262 第一版是以 JavaScript 1.1 為基礎。</td> </tr> <tr> <td>JavaScript 1.2</td> <td>在 JavaScript 1.2 釋出時,ECMA-262 尚未完成。JavaScript 1.2 因為以下原因而不完全相容於 ECMA-262 第一版︰ <ul> <li>Netscape 在 JavaScript 1.2 中開發了未考慮到 ECMA-262 的額外機能。</li> <li>ECMA-262 加入兩個新的機能︰使用 Unicode 來國際化,統一所有平台的行為。JavaScript 1.2 的若干機能,如 Date 物件,依賴於平台,且使用平台規範的行為。</li> </ul> </td> </tr> <tr> <td> <p>JavaScript 1.3</p> </td> <td> <p>JavaScript 1.3 完全相容於 ECMA-262 第一版。</p> <p>JavaScript 1.3 解決了 JavaScript 1.2 和 ECMA-262 的不一致,除了 == 和 != 以外,保留 JavaScript 1.2 所有的額外機能,以符合 ECMA-262。</p> </td> </tr> <tr> <td> <p>JavaScript 1.4</p> </td> <td> <p>JavaScript 1.4 完全相容於 ECMA-262 第一版。</p> <p>在 JavaScript 1.4 釋出時,ECMAScript 規範的第三版仍尚未完成。</p> </td> </tr> <tr> <td>JavaScript 1.5</td> <td>JavaScript 1.5 完全相容於 ECMA-262 第三版。</td> </tr> </tbody> +</table> +<p><small><strong>表 1.2: JavaScript 版本和 ECMAScript 版本</strong></small></p> +<div class="note"><strong>附註</strong>: ECMA-262 第二版由次要的編修和對第一版規範的錯誤修正所組成。Ecma International 的 TC39 工作群組目前正工作於 ECMAScript 第四版,第四版將會對應下一個 JavaScript 的釋出版 JavaScript 2.0。</div> +<p><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83" title="zh tw/Core JavaScript 1.5 參考">Core JavaScript 參考</a> 指出哪些語言機能對應於 ECMAScript。</p> +<p>JavaScript 將會不斷包含尚未成為 ECMAScript 規範的新機能;JavaScript 在提供額外機能時仍會相容於 ECMAScript。</p><h4 id="JavaScript_文件與_ECMAScript_規範" name="JavaScript_文件與_ECMAScript_規範">JavaScript 文件與 ECMAScript 規範</h4> +<p>ECMAScript 規範是實作 ECMAScript 的必要條件的匯整;如果你想知道 JavaScript 機能 ECMAScript 規範是否支援,規範就會很有用。如果你有意只使用 ECMAScript 支援的機能來編寫 JavaScript 代碼,你會需要檢閱 ECMAScript 規範。</p> +<p>ECMAScript 文件不是為了幫助 Script 程式員;應該使用 JavaScript 文件取得有關編寫 Script 的資訊。</p> +<h4 id="JavaScript_和_ECMAScript_術語" name="JavaScript_和_ECMAScript_術語">JavaScript 和 ECMAScript 術語</h4> +<p>ECMAScript 規範使用的術語和語法對 JavaScript 程式員來說可能會很陌生。儘管在 ECMAScript 裡的語言說明有所不同,語言本身仍然是一樣的。JavaScript 支援所有在 ECMAScript 規範中描述的機能。</p> +<p>JavaScript 的文件為 JavaScript 程式員適當的描述語言的表面。例如︰</p> +<ul> <li>在 JavaScript 文件中不會討論全域物件,因為你不能直接使用。你使用的是全域物件的方法和屬性,已在 JavaScript 文件中稱為頂層函數和屬性來描述。</li> <li>在 JavaScript 文件中不會討論到沒有參數(零參數)的 <code>Number</code> 和 <code>String</code> 物件的建構子,因為產生的東西沒什麼用。沒有參數的 <code>Number</code> 建構子返回 +0,沒有參數的 <code>String</code> 建構子返回 ""(空字串)。</li> +</ul> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:關於", "Core_JavaScript_1.5_教學:值") }}</p> +<p> </p> <p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/JavaScript_Overview", "es": "es/Gu\u00eda_JavaScript_1.5/Concepto_de_JavaScript", "fr": "fr/Guide_JavaScript_1.5/Aper\u00e7u_de_JavaScript", "ja": "ja/Core_JavaScript_1.5_Guide/JavaScript_Overview", "ko": "ko/Core_JavaScript_1.5_Guide/JavaScript_Overview", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Przegl\u0105d_JavaScriptu", "zh-cn": "cn/Core_JavaScript_1.5_Guide/JavaScript\u603b\u89c8" } ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/liveconnect_概要/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/liveconnect_概要/index.html new file mode 100644 index 0000000000..985cfe5989 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/liveconnect_概要/index.html @@ -0,0 +1,11 @@ +--- +title: LiveConnect 概要 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/LiveConnect_概要 +--- +<p> </p> +<h2 id="LiveConnect_概要" name="LiveConnect_概要">LiveConnect 概要</h2> +<p><strong><a class="internal" href="/zh_tw/LiveConnect" title="zh tw/LiveConnect">LiveConnect</a></strong> 是應用程式介面的名稱,可提供 JavaScript 呼叫 Java 類別的方法的能力,反之亦然,也可以使用 Java 既有的基礎反向運用。</p> +<dl> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/%E5%8C%85%E8%A3%9D%E5%99%A8%E7%9A%84%E9%81%8B%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/包裝器的運用">包裝器的運用</a></dd> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/JavaScript_%E5%90%91_Java_%E7%9A%84%E9%80%9A%E8%A8%8A" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/JavaScript 向 Java 的通訊">JavaScript 向 Java 的通訊</a></dd> <dd> <dl> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/JavaScript_%E5%90%91_Java_%E7%9A%84%E9%80%9A%E8%A8%8A#Packages_%E7%89%A9%E4%BB%B6" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/JavaScript 向 Java 的通訊#Packages 物件">Packages 物件</a></dd> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/JavaScript_%E5%90%91_Java_%E7%9A%84%E9%80%9A%E8%A8%8A#Java_%E9%99%A3%E5%88%97%E7%9A%84%E9%81%8B%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/JavaScript 向 Java 的通訊#Java 陣列的運用">Java 陣列的運用</a></dd> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/JavaScript_%E5%90%91_Java_%E7%9A%84%E9%80%9A%E8%A8%8A#%E5%8C%85%E8%A3%9D%E5%92%8C%E9%A1%9E%E5%88%A5%E7%9A%84%E5%8F%83%E8%80%83" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/JavaScript 向 Java 的通訊#包裝和類別的參考">包裝和類別的參考</a></dd> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/JavaScript_%E5%90%91_Java_%E7%9A%84%E9%80%9A%E8%A8%8A#char_%E9%A1%9E%E5%9E%8B%E7%9A%84%E5%8F%83%E6%95%B8" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/JavaScript 向 Java 的通訊#char 類型的參數">char 類型的參數</a></dd> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/JavaScript_%E5%90%91_Java_%E7%9A%84%E9%80%9A%E8%A8%8A#%E5%9C%A8_JavaScript_%E4%B8%AD%E8%99%95%E7%90%86_Java_%E7%9A%84%E4%BE%8B%E5%A4%96" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/JavaScript 向 Java 的通訊#在 JavaScript 中處理 Java 的例外">在 JavaScript 中處理 Java 的例外</a></dd> </dl> </dd> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/Java_%E5%90%91_JavaScript_%E7%9A%84%E9%80%9A%E8%A8%8A" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/Java 向 JavaScript 的通訊">Java 向 JavaScript 的通訊</a></dd> <dd> <dl> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/Java_%E5%90%91_JavaScript_%E7%9A%84%E9%80%9A%E8%A8%8A/LiveConnect_%E9%A1%9E%E5%88%A5%E7%9A%84%E4%BD%BF%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/Java 向 JavaScript 的通訊/LiveConnect 類別的使用">LiveConnect 類別的使用</a></dd> </dl> </dd> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/%E8%B3%87%E6%96%99%E9%A1%9E%E5%9E%8B%E7%9A%84%E8%BD%89%E6%8F%9B" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/資料類型的轉換">資料類型的轉換</a></dd> <dd> <dl> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/%E8%B3%87%E6%96%99%E9%A1%9E%E5%9E%8B%E7%9A%84%E8%BD%89%E6%8F%9B/%E5%BE%9E_JavaScript_%E5%88%B0_Java_%E7%9A%84%E8%BD%89%E6%8F%9B" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/資料類型的轉換/從 JavaScript 到 Java 的轉換">從 JavaScript 到 Java 的轉換</a></dd> <dd><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/%E8%B3%87%E6%96%99%E9%A1%9E%E5%9E%8B%E7%9A%84%E8%BD%89%E6%8F%9B/%E5%BE%9E_Java_%E5%88%B0_JavaScript_%E7%9A%84%E8%BD%89%E6%8F%9B" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/資料類型的轉換/從 Java 到 JavaScript 的轉換">從 Java 到 JavaScript 的轉換</a></dd> </dl> </dd> +</dl> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:再談屬性的繼承:沒有多重繼承", "Core_JavaScript_1.5_教學:LiveConnect_概要:包裝器的運用") }}</p> +<p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/LiveConnect_Overview", "es": "es/Gu\u00eda_JavaScript_1.5/Concepto_general_de_LiveConnect", "ja": "ja/Core_JavaScript_1.5_Guide/LiveConnect_Overview", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Podgl\u0105d_klas_LiveConnect" } ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/例外處理語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/例外處理語法/index.html new file mode 100644 index 0000000000..9f369cbcac --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/例外處理語法/index.html @@ -0,0 +1,39 @@ +--- +title: 例外處理語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/例外處理語法 +--- +<h3 id="例外處理語法" name="例外處理語法">例外處理語法</h3> +<p>你可以使用 <code>throw</code> 語法來拋出例外,並使用 <code>try...catch</code> 語法來處理例外。</p> +<p>你也可以使用 <code>try...catch</code> 語法來處理 Java 的例外。參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/%E5%BE%9E_JavaScript_%E5%90%91_Java_%E7%9A%84%E9%80%9A%E8%A8%8A#%E5%9C%A8_JavaScript_%E4%B8%AD%E8%99%95%E7%90%86_Java_%E7%9A%84%E4%BE%8B%E5%A4%96" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/從 JavaScript 向 Java 的通訊#在 JavaScript 中處理 Java 的例外">在 JavaScript 中處理 Java 的例外</a> 和 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/LiveConnect_%E6%A6%82%E8%A6%81/%E5%BE%9E_JavaScript_%E5%90%91_Java_%E7%9A%84%E9%80%9A%E8%A8%8A" title="zh tw/Core JavaScript 1.5 教學/LiveConnect 概要/從 JavaScript 向 Java 的通訊">從 JavaScript 向 Java 的通訊</a> 取得資訊。</p> +<ul> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E4%BE%8B%E5%A4%96%E8%99%95%E7%90%86%E8%AA%9E%E6%B3%95/throw_%E8%AA%9E%E6%B3%95" title="zh tw/Core JavaScript 1.5 教學/例外處理語法/throw 語法">throw 語法</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E4%BE%8B%E5%A4%96%E8%99%95%E7%90%86%E8%AA%9E%E6%B3%95/try...catch_%E8%AA%9E%E6%B3%95" title="zh tw/Core JavaScript 1.5 教學/例外處理語法/try...catch 語法">try...catch 語法</a></li> +</ul> +<h3 id="例外的類型" name="例外的類型">例外的類型</h3> +<p>在此列出 JavaScript 中所有可以拋出的物件。不過並非所有的可拋出物件都以同樣方式產生。雖然只是非常普通的拋出數字或字串來表示錯誤,只使用其中幾個特別為某些用途而產生的例外的類型,往往會更加有效率︰</p> +<ul> + <li>ECMAScript 的例外︰ + <ul> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/Error" title="zh tw/Core JavaScript 1.5 教學/Error">Error</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/EvalError" title="zh tw/Core JavaScript 1.5 教學/EvalError">EvalError</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/RangeError" title="zh tw/Core JavaScript 1.5 教學/RangeError">RangeError</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/ReferenceError" title="zh tw/Core JavaScript 1.5 教學/ReferenceError">ReferenceError</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/SyntaxError" title="zh tw/Core JavaScript 1.5 教學/SyntaxError">SyntaxError</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/TypeError" title="zh tw/Core JavaScript 1.5 教學/TypeError">TypeError</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/URIError" title="zh tw/Core JavaScript 1.5 教學/URIError">URIError</a></li> + </ul> + </li> + <li>DOM 的例外︰ + <ul> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/DOMException" title="zh tw/Core JavaScript 1.5 教學/DOMException">DOMException</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/EventException" title="zh tw/Core JavaScript 1.5 教學/EventException">EventException</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/RangeException" title="zh tw/Core JavaScript 1.5 教學/RangeException">RangeException</a></li> + <li>... (?)</li> + </ul> + </li> + <li><a class="internal" href="/zh_tw/nsIXPCException" title="zh tw/nsIXPCException">nsIXPCException</a> (<a class="internal" href="/zh_tw/XPConnect" title="zh tw/XPConnect">XPConnect</a>)</li> +</ul> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:註解", "Core_JavaScript_1.5_教學:例外處理語法:throw_語法") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/例外處理語法/throw_語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/例外處理語法/throw_語法/index.html new file mode 100644 index 0000000000..83230830e6 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/例外處理語法/throw_語法/index.html @@ -0,0 +1,34 @@ +--- +title: throw 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/例外處理語法/throw_語法 +--- +<h3 id="throw_語法" name="throw_語法">throw 語法</h3> +<p>使用 <code>throw</code> 語法來拋出例外。當你準備要拋出例外時,指定內含想要拋出的值的表達式︰</p> +<pre class="eval">throw expression; +</pre> +<p>你可以拋出任何的表達式,而不只是特定類型的表達式。以下代碼拋出各式各樣的例外︰</p> +<pre class="eval">throw "Error2"; +throw 42; +throw true; +throw {toString: function() { return "I'm an object!"; } }; +</pre> +<div class="note"> + <strong>附註:</strong> 當拋出例外時,還可以指定物件。然後可以在 <code>catch</code> 區塊裡參考物件的屬性。以下範例建立 <code>UserException</code> 類型的物件 <code>myUserException</code>,並使用在拋出語法之中。</div> +<pre class="eval">// 建立類型為 UserException 的物件 +function UserException (message) +{ + this.message=message; + this.name="UserException"; +} + +// 當用來當作字串時(例如,用於錯誤控制台), +// 就把例外轉換成適當的字串。 +UserException.prototype.toString = function () +{ + return this.name + ': "' + this.message + '"'; +} + +// 建立那一種物件類型的實體,並拋出 +throw new UserException("Value too high"); +</pre> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/例外處理語法/try...catch_語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/例外處理語法/try...catch_語法/index.html new file mode 100644 index 0000000000..2bc150c6fc --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/例外處理語法/try...catch_語法/index.html @@ -0,0 +1,162 @@ +--- +title: try...catch 語法 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/例外處理語法/try...catch_語法 +--- +<h3 id="try...catch_語法" name="try...catch_語法">try...catch 語法</h3> + +<p><code>try...catch</code> 語法標記出一整塊需要測試的語句,並指定一個以上的回應方法,萬一有例外拋出時,<code>try...catch</code> 語句就會捕捉。</p> + +<p><code>try...catch</code> 語法由 <code>try</code> 區塊所組成,其中內含一個以上的語句,和零個以上的 <code>catch</code> 區塊,其中內含語句用來指明當例外在 try 區塊裡拋出時要做些什麼。也就是當你希望 <code>try</code> 區塊成功,但如果他不成功時,你會想要把控制權移交給 <code>catch</code> 區塊。如果任何在 <code>try</code> 區塊內部裡的語句(或者在 <code>try</code> 區塊內部呼叫的函數裡)拋出例外,控制權將立即轉移給 <code>catch</code> 區塊。如果沒有例外從 <code>try</code> 區塊裡拋出,就會跳過 <code>catch</code> 區塊。<code>finally</code> 區塊會在 <code>try</code> 或 <code>catch</code> 區塊執行之後才執行,但會在 <code>try...catch</code> 語法後面的語句之前執行。</p> + +<p>以下範例使用 <code>try...catch</code> 語法。本範例呼叫函數,這個函數是用來在陣列裡根據傳給函數的值來查詢月份的名稱。如果傳入的值不符合月份的數字 (1-12),就會拋出值為 <code>InvalidMonthNo</code> 的例外,而且在 <code>catch</code> 區塊裡的語句會把 <code>monthName</code> 變數設定為 <code>unknown</code>。</p> + +<pre class="notranslate">function getMonthName (mo) { + mo=mo-1; // 針對陣列索引調整月份的數字 (1=Jan, 12=Dec) + var months=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul", + "Aug","Sep","Oct","Nov","Dec"); + if (months[mo] != null) { + return months[mo] + } else { + throw "InvalidMonthNo" + } +} + +try { +// 需要測試的語句 + monthName=getMonthName(myMonth) // 可拋出例外的函數 +} +catch (e) { + monthName="unknown" + logMyErrors(e) // 把例外物件傳給錯誤處理器 +} +</pre> + +<h4 id="catch_區塊" name="catch_區塊">catch 區塊</h4> + +<p>你可以使用單一的 <code>catch</code> 區塊來處理所有在 <code>try</code> 區塊裡可能會產生的例外,或者你也可以使用分離的 <code>catch</code> 區塊,每一個皆各自處理特定的例外類型。</p> + +<p><strong>單一 catch 區塊</strong><br> + 使用單一 <code>try...catch</code> 語法的 <code>catch</code> 區塊針對在 <code>try</code> 區塊裡拋出的所有例外來執行錯誤處理的代碼。</p> + +<p>單一的 <code>catch</code> 區塊語句如下︰</p> + +<pre class="notranslate">catch (catchID) { + statements +} +</pre> + +<p><code>catch</code> 區塊所指定的識別子(前面語句裡的 <code>catchID</code>)持有由 <code>throw</code> 語法所指定的值。你可以使用這個識別子來取得有關於被拋出的例外的資訊。當進入 <code>catch</code> 區塊時,JavaScript 就會建立這個識別子。識別子只能在 <code>catch</code> 區塊的期間內持續作用。<code>catch</code> 區塊執行結束以後,識別子就不再能使用。</p> + +<p>舉例來說,以下代碼會拋出例外。當例外出現的時候,控制權就轉移給 <code>catch</code> 區塊。</p> + +<pre class="notranslate">try { + throw "myException" // 產生例外 +} +catch (e) { +// 用來處理任何例外的語句 + logMyErrors(e) // 把例外物件傳給錯誤處理器 +} +</pre> + +<p><strong>多重 catch 區塊</strong><br> + 單一的 <code>try</code> 語句可以對應複數個有前提條件的 <code>catch</code> 區塊,每一個皆可處理特定的例外的類型。於是,當指定的的例外被拋出時,就只會進入適當條件的 <code>catch</code> 區塊。你也可以針對所有未指定的例外,使用選用性的對應所有例外的 <code>catch</code> 區塊來作為語法裡最後一個的 catch 區塊。</p> + +<p>舉例來說,以下函數呼叫三個其他的函數(已在別處定義了)來檢驗自己的參數。如果檢驗函數判斷出他所要檢驗的元素是無效的話,他就返回 0,導致呼叫者拋出對應的例外。</p> + +<pre class="notranslate">function getCustInfo(name, id, email) +{ + var n, i, e; + + if (!validate_name(name)) + throw "InvalidNameException" + else + n = name; + if (!validate_id(id)) + throw "InvalidIdException" + else + i = id; + if (!validate_email(email)) + throw "InvalidEmailException" + else + e = email; + cust = (n + " " + i + " " + e); + return (cust); +} +</pre> + +<p>有各種條件的 <code>catch</code> 區塊會把控制權安排給適當的例外處理器。</p> + +<pre class="notranslate">try { +// 可以拋出三個例外的函數 + getCustInfo("Lee", 1234, "lee@netscape.com") +} + +catch (e if e == "InvalidNameException") { +// 針對無效的名稱呼叫處理器 + bad_name_handler(e) +} + +catch (e if e == "InvalidIdException") { +// 針對無效的 ID 呼叫處理器 + bad_id_handler(e) +} + +catch (e if e == "InvalidEmailException") { +// 針對無效的電子郵件位址呼叫處理器 + bad_email_handler(e) +} + +catch (e){ +// 不知道該做什麼,就記在日誌裡 + logError(e) +} +</pre> + +<h4 id="finally_區塊" name="finally_區塊">finally 區塊</h4> + +<p><code>finally</code> 區塊內含的語句,會在 try 和 catch 區塊執行以後、並在 <code>try...catch</code> 語法後面的語句之前來執行。無論有沒有被拋出的例外,<code>finally</code> 區塊都會執行。如果有被拋出的例外,即使沒有 catch 區塊來處理這些例外,還是會執行 <code>finally</code> 區塊裡的語句。</p> + +<p>當出現例外時,你可以使用 <code>finally</code> 區塊來使你的 Script 優美的停止。舉例來說,你可能需要釋放 Script 所佔用的資源。以下範例開啟了檔案,並執行使用這個檔案(伺服端的 JavaScript 可讓你存取檔案)的語句。如果在開啟檔案時有例外被拋出,<code>finally</code> 區塊會在 Script 停止之前把檔案關閉。</p> + +<pre class="notranslate">openMyFile(); +try { + writeMyFile(theData); // 這裡有可能拋出錯誤 +}catch(e){ + handleError(e); // 如果我們得到錯誤,就處理他 +}finally { + closeMyFile(); // 永遠會關閉這項資源 +} +</pre> + +<h4 id="try...catch_語法的嵌套" name="try...catch_語法的嵌套">try...catch 語法的嵌套</h4> + +<p>你可以嵌套一個以上的 <code>try...catch</code> 語法。如果有一個內部的 <code>try...catch</code> 語法沒有 catch 區塊,圍住這些 <code>try...catch</code> 語法的 catch 區塊就會被用來比對。</p> + +<h4 id="Error_物件的用處" name="Error_物件的用處">Error 物件的用處</h4> + +<p>根據錯誤的類型,你有可能使用 “name” 和 “message” 屬性來取得更多明確的訊息。“name” 提供錯誤的一般類別(例如,“DOMException” 或 “Error”),“message” 通常提供更為簡練的訊息,如此就能把錯誤物件轉換為字串來取得訊息。</p> + +<p>如果你要拋出你自己的例外,以從這些屬性取得好處(例如,如果你的 catch 區塊不區分你自己的例外和系統的例外的話),你可以使用錯誤建構子。例如︰</p> + +<pre class="notranslate">function doSomethingErrorProne () { + if (ourCodeMakesAMistake()) { + throw (new Error('The message')); + } + else { + doSomethingToGetAJavascriptError(); + } +} +.... +try { + doSomethingErrorProne(); +} +catch (e) { + alert(e.name);// 警報 'Error' + alert(e.message); // 警報 'The message' 或 JavaScript 錯誤訊息 +} +</pre> + +<div class="noinclude"> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:例外處理語法:throw_語法", "Core_JavaScript_1.5_教學:函數的定義") }}</p> +</div> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/函數的定義/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/函數的定義/index.html new file mode 100644 index 0000000000..f56f796a03 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/函數的定義/index.html @@ -0,0 +1,42 @@ +--- +title: 函數的定義 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/函數的定義 +--- +<div class="onlyinclude"> <h3 id="函數的定義" name="函數的定義">函數的定義</h3> <p>函數的定義由以下的關鍵字所組成︰</p> <ul> <li>函數的名稱。</li> <li>傳給函數的參數的列表,以小括弧包夾、並以逗號分隔。</li> <li>用來定義函數的 JavaScript 語句,以大括弧包夾 { }。在函數裡的語句裡可含有在應用程式中已定義的其他函數的呼叫。</li> </ul> <h4 id="簡單的範例" name="簡單的範例">簡單的範例</h4> <p>舉例來說,以下代碼定義了一個簡單的函數,名為 square︰</p> <pre class="eval">function square(number) { + return number * number; +} +</pre> <p>函數 <code>square</code> 接收一個參數,稱為 <code>number</code>。函數由一個語句所組成,指示要求返回函數的參數的平方。<code>return</code> 語句用來指定函數返回的值。</p> <pre class="eval">return number * number +</pre> <p>原始的參數是<em>以值</em>傳遞給函數。值是傳遞給函數,但是如果函數修改了參數的值,這項改變不會影響到全域或呼叫端函數裡的值。</p> <p>如果你以物件(例如,<a href="/en/JavaScript/Glossary" title="en/JS/Glossary">非原始值</a>,如陣列或使用者定義的物件)作為參數來傳遞,物件的參考會被傳遞給函數。這意味著如果函數修改了物件的屬性,函數之外也看得見這項改變,如以下範例所示︰</p> <pre class="eval">function myFunc(theObject) { + theObject.make="Toyota"; +} +var mycar = {make:"Honda", model:"Accord", year:1998}; +var x=mycar.make; // 返回 Honda +myFunc(mycar); +var y=mycar.make; // 返回 Toyota(屬性已被函數修改) +</pre> <p>注意,把新的物件代入給參數,在呼叫端將<em>不會</em>有任何的影響︰</p> <pre class="eval">function myFunc(theObject) { + theObject = {make:"Ford", model:"Focus", year:2006}; +} +var mycar = {make:"Honda", model:"Accord", year:1998}; +var x=mycar.make; // 返回 Honda +myFunc(mycar); +var y=mycar.make; // 仍然返回 Honda +</pre> <h4 id="Defining_functions_conditionally" name="Defining_functions_conditionally">有條件的函數的定義</h4> <p>函數可以根據條件來作定義。例如,給以下的函數定義︰</p> <pre class="eval">if (num == 0) +{ + function myFunc(theObject) { + theObject.make="Toyota" + } +} +</pre> <p><code>myFunc</code> 函數只會在變數 <code>num</code> 等於 0 時被定義。如果 <code>num</code> 不等於 0,函數就不會被定義,且任何企圖執行這個函數的嘗試都將會失敗。</p> <h4 id="函數的表達式" name="函數的表達式">函數的表達式</h4> <p>函數也可以在表達式裡來作定義。這稱為<strong>函數表達式</strong>。一般這類函數都是<em>無名的</em>,他沒有名稱也沒關係。例如,函數 <code>square</code> 可以定義成︰</p> <pre class="eval">var square = function(number) {return number * number}; +</pre> <p>當要傳遞函數作為參數給另一個函數時,這個作法會很方便。以下範例示範了 map 函數的定義,然後呼叫端使用無名函數作為第一個參數︰</p> <pre class="eval">function map(f,a) { + var result=new Array; + for (var i = 0; i != a.length; i++) + result[i] = f(a[i]); + return result; +} +</pre> <p>接著呼叫</p> <pre class="eval">map(function(x) {return x * x * x}, [0, 1, 2, 5, 10]); +</pre> <p>返回 {{ mediawiki.external('0, 1, 8, 125, 1000') }}。</p> +</div> +<h4 id="參閱" name="參閱">參閱</h4> +<p>除了如前所述定義函數以外,你也可以定義 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_教學/預先定義的核心物件/函數物件" title="zh tw/Core JavaScript 1.5 教學/預先定義的核心物件/函數物件">函數物件</a>。</p> +<p>方法就是和物件相關聯的函數。你將會在 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_教學#%E7%89%A9%E4%BB%B6%E7%9A%84%E9%81%8B%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學#物件的運用">第 8 章,「物件的運用」</a> 中學到更多有關於物件和方法。{{ PreviousNext("Core_JavaScript_1.5_教學:例外處理語法:try...catch_語法", "Core_JavaScript_1.5_教學:函數的呼叫") }}</p> +<p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Defining_Functions", "fr": "fr/Guide_JavaScript_1.5/D\u00e9finition_de_fonctions", "ja": "ja/Core_JavaScript_1.5_Guide/Defining_Functions", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Definiowanie_funkcji" } ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/建立新的物件/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/建立新的物件/index.html new file mode 100644 index 0000000000..faadc10f07 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/建立新的物件/index.html @@ -0,0 +1,9 @@ +--- +title: 建立新的物件 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/建立新的物件 +--- +<p> </p> + +<p>This page was auto-generated because a user created a sub-page to this page.</p> + +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/break_語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/break_語法/index.html new file mode 100644 index 0000000000..ea6551a851 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/break_語法/index.html @@ -0,0 +1,27 @@ +--- +title: break 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/break_語法 +--- +<h3 id="break_語法" name="break_語法">break 語法</h3> +<p>使用 <code>break</code> 語法可以終止 <code>loop、switch、label</code> 語法。</p> +<ul> + <li>當你使用不加標籤的 <code>break</code> 時,他會立即終止最內層的 <code>while、do-while、for</code>、<code>switch</code> 的循環,並把控制權轉移給後面的語句。</li> + <li>當你使用加上標籤的 <code>break</code> 時,他會終止被指定的標籤所標記的語句。</li> +</ul> +<p>break 語法如下︰</p> +<ol> + <li><code>break;</code></li> + <li><code>break label;</code></li> +</ol> +<p>第一個語句形式會終止最內層的循環或 <code>switch</code>,第二個語句形式會終止指定標籤的語句。</p> +<p><strong>範例</strong><br> + 在以下的範例中,反覆操作陣列裡的元素,直到找到某個索引的元素的值等於 <code>theValue</code>︰</p> +<pre>for (i = 0; i < a.length; i++) { + if (a[i] == theValue) + break; +} +</pre> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:label_語法", "Core_JavaScript_1.5_教學:循環語法:continue_語法") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/continue_語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/continue_語法/index.html new file mode 100644 index 0000000000..68f757d572 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/continue_語法/index.html @@ -0,0 +1,49 @@ +--- +title: continue 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/continue_語法 +--- +<h3 id="continue_語法" name="continue_語法">continue 語法</h3> +<p><code>continue</code> 語法可用來重新開始 <code>while、do-while、for、</code><code>label</code> 語法。</p> +<ul> + <li>當你使用沒加標籤的 <code>continue</code> 時,他會終止這一次的最內層的 <code>while、do-while</code>、<code>for</code> 語法的反覆過程,並繼續執行下一次的反覆過程。與 <code>break</code> 語法相較之下,<code>continue</code> 不會終止整個循環的執行。在 <code>while</code> 循環中,他會跳回條件處。在 <code>for</code> 循環中,他會跳回遞增表達式。</li> + <li>當你使用加上標籤的 <code>continue</code> 時,他會跳到以 <code>label</code> 標記的循環語句。</li> +</ul> +<p><code>continue</code> 語法如下︰</p> +<ol> + <li><code>continue</code></li> + <li><code>continue label</code></li> +</ol> +<p><strong>範例 1</strong><br> + 以下範例示範加上 <code>continue</code> 語法的 <code>while</code> 循環,<code>continue</code> 語法會在 <code>i</code> 值為 3 時執行。因此,<code>n</code> 的值依序為 1、3、7、12。</p> +<pre class="eval">i = 0; +n = 0; +while (i < 5) { + i++; + if (i == 3) + continue; + n += i; +} +</pre> +<p><strong>範例 2</strong><br> + 已加上標籤的語法 <code>checkiandj</code> 內含已加上標籤的語法 <code>checkj</code>。如果遇到 <code>continue</code>,程式會終止 <code>checkj</code> 這一次的反覆過程,並開始下一次的反覆過程。每當遇到 <code>continue</code>,就會反覆執行 <code>checkj</code> 直到他的條件返回 false 為止。當返回 false 時,<code>checkiandj</code> 語句完成了餘數的計算,且 <code>checkiandj</code> 會反覆執行,直到他的條件返回為 false 為止。當返回 false 時,程式繼續執行 <code>checkiandj</code> 後面的語句。</p> +<p>如果 <code>continue</code> 有一個 <code>checkiandj</code> 標籤,程式就會從 <code>checkiandj</code> 語句的開始處繼續執行。</p> +<pre>checkiandj : + while (i < 4) { + document.write(i + "<br/>"); + i += 1; + checkj : + while (j > 4) { + document.write(j + "<br/>"); + j -= 1; + if ((j % 2) == 0) + continue checkj; + document.write(j + " is odd.<br/>"); + } + document.write("i = " + i + "<br/>"); + document.write("j = " + j + "<br/>"); + } +</pre> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:break_語法", "Core_JavaScript_1.5_教學:物件的操作語法") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/do...while_語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/do...while_語法/index.html new file mode 100644 index 0000000000..5091d476fd --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/do...while_語法/index.html @@ -0,0 +1,22 @@ +--- +title: do...while 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/do...while_語法 +--- +<h3 id="do...while_語法" name="do...while_語法">do...while 語法</h3> +<p><code>do...while</code> 語法會反覆執行直到指定條件的求值結果為 false 為止。<code>do...while</code> 語法如下︰</p> +<pre class="eval">do + statement +while (condition); +</pre> +<p><code>statement</code> 會在檢測條件之前就先執行一次。若要執行多個語句,就使用區塊語法(<code>{ ... }</code>)把語句群組化。如果 <code>condition</code> 為 true,就會再執行一次語句。每回執行以後,就會檢測條件。當條件為 false 時,就停止執行並把控制權轉移給 <code>do...while</code> 後面的語句。</p> +<p><strong>範例</strong><br> + 在以下範例中,do 循環至少會反覆執行一次,並一直反覆到 i 不再小於 5 為止。</p> +<pre class="eval">do { + i += 1; + document.write(i); +} while (i < 5); +</pre> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:for_語法", "Core_JavaScript_1.5_教學:循環語法:while_語法") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/for_語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/for_語法/index.html new file mode 100644 index 0000000000..8978b7ed27 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/for_語法/index.html @@ -0,0 +1,53 @@ +--- +title: for 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/for_語法 +--- +<h3 id="for_語法" name="for_語法">for 語法</h3> +<p><code>for</code> 循環反覆執行直到指定的條件的求值為 false 為止。JavaScript 的 for 循環和 Java 和 C 的 for 循環很類似。<code>for</code> 語法如下︰</p> +<pre class="eval">for ([initialExpression]; [condition]; [incrementExpression]) + statement +</pre> +<p>執行 <code>for</code> 循環時,會執行以下步驟︰</p> +<ol> + <li>執行初始化表達式 <code>initialExpression</code>。這個表達式通常會初始化為 1 以上的計數器,不過也可以是任意複雜程度的表達式。也可以在表達式裡宣告變數。</li> + <li>對 <code>condition</code> 表達式求值。如果 <code>condition</code> 的值為 true,就會執行循環語法。如果 <code>condition</code> 的值為 false,就終止 <code>for</code> 循環。如果完全省略 <code>condition</code> 表達式,條件就會被代入為 true。</li> + <li>執行 <code>statement</code>。若要執行多個語句,就使用區塊語法(<code>{ ... }</code>)把這些語句群組化。</li> + <li>執行更新表達式 <code>incrementExpression</code>,並回到第 2 步驟。</li> +</ol> +<p><strong>範例</strong><br> + 以下函數內含 <code>for</code> 語法,計數至下拉式選單的已選擇選項的數目為止(Select 物件允許複選)。<code>for</code> 語法宣告變數 <code>i</code> 並以 0 初始化。他會檢驗 <code>i</code> 是否小於 <code>Select</code> 物件的選項數目,持續執行 <code>if</code> 語句,並在每一次循環之後以 1 遞增 <code>i</code>。</p> +<pre><script type="text/javascript">//<![CDATA[ + +function howMany(selectObject) { + var numberSelected = 0; + for (var i = 0; i < selectObject.options.length; i++) { + if (selectObject.options[i].selected) + numberSelected++; + } + return numberSelected; +} + +//]]></script> +<form name="selectForm"> + <p> + <strong>Choose some music types, then click the button below:</strong> + <br/> + <select name="musicTypes" multiple="multiple"> + <option selected="selected">R&B</option> + <option>Jazz</option> + <option>Blues</option> + <option>New Age</option> + <option>Classical</option> + <option>Opera</option> + </select> + </p> + <p> + <input type="button" value="How many are selected?" + onclick="alert ('Number of options selected: ' + howMany(document.selectForm.musicTypes))"/> + </p> +</form> +</pre> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法", "Core_JavaScript_1.5_教學:循環語法:do...while_語法") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/label_語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/label_語法/index.html new file mode 100644 index 0000000000..8b63254ac1 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/label_語法/index.html @@ -0,0 +1,22 @@ +--- +title: label 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/label_語法 +--- +<h3 id="label_語法" name="label_語法">label 語法</h3> +<p><code>label</code> 提供識別子作為語法,可讓你的程式的任何一處都能參考得到。舉例來說,你可以使用標籤來標識循環,然後使用 <code>break</code> 或 <code>continue</code> 語法來指示程式是否要中斷循環或繼續執行。</p> +<p><code>label</code> 語法如下︰</p> +<pre>label : + statement +</pre> +<p><code>label</code> 的值可以是任意的 JavaScript 識別子,只要不是保留字的話都可以使用。使用標籤來標識的 <code>statement</code> 可以是任意的語句。</p> +<p><strong>範例</strong><br> + 在以下範例中,標籤 <code>markLoop</code> 標識了 while 循環。</p> +<pre>markLoop: +while (theMark == true) + doSomething(); +} +</pre> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:while_語法", "Core_JavaScript_1.5_教學:循環語法:break_語法") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/while_語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/while_語法/index.html new file mode 100644 index 0000000000..76beeaafeb --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/循環語法/while_語法/index.html @@ -0,0 +1,38 @@ +--- +title: while 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/while_語法 +--- +<h3 id="while_語法" name="while_語法">while 語法</h3> +<p><code>while</code> 語法會執行他的語句,只要指定的條件的求值結果為 true。<code>while</code> 語法如下︰</p> +<pre class="eval">while (condition) + statement +</pre> +<p>如果條件變成 false,就停止執行循環內部的 <code>statement</code>,並把控制權移交給循環後面的語句。</p> +<p>條件的測試會發生在執行循環裡的 <code>statement</code> 之前。如果返回的條件為 true,就會執行 <code>statement</code>,並再次測試條件。如果返回的條件為 false,就停止執行並把控制權移交給 <code>while</code> 後面的語句。</p> +<p>若要執行多個語句,就使用區塊語法({ ... })把這些語句群組化。</p> +<p><strong>範例 1</strong><br> + 以下 <code>while</code> 循環會一直反覆直到 <code>n</code> 小於 3 為止︰</p> +<pre class="eval">n = 0; +x = 0; +while (n < 3) { + n++; + x += n; +} +</pre> +<p>每一次的反覆,循環便會遞增 <code>n</code> 並且把 <code>n</code> 的值代入給 <code>x</code>。因此,<code>x</code> 和 <code>n</code> 持有下列的值︰</p> +<ul> + <li>第一次循環以後︰<code>n</code> = 1、<code>x</code> = 1</li> + <li>第二次循環以後︰<code>n</code> = 2、<code>x</code> = 3</li> + <li>第三次循環以後︰<code>n</code> = 3、<code>x</code> = 6</li> +</ul> +<p>第三次的循環完成以後,條件 <code>n</code> < 3 不再為 true,所以終止循環。</p> +<p><strong>範例 2</strong><br> + 應避免無限循環。確認循環裡的條件最終一定會變成 false。否則循環永遠不會終止。下面的 <code>while</code> 循環裡的語句將會永遠執行下去,因為條件永遠不會變成 false︰</p> +<pre class="eval">while (true) { + alert("Hello, world"); +} +</pre> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:do...while_語法", "Core_JavaScript_1.5_教學:循環語法:label_語法") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/getter_和_setter_的定義/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/getter_和_setter_的定義/index.html new file mode 100644 index 0000000000..222529aa18 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/getter_和_setter_的定義/index.html @@ -0,0 +1,110 @@ +--- +title: Getter 和 Setter 的定義 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/Getter_和_Setter_的定義 +--- +<p> </p> + +<h3 id="Getter_和_Setter_的定義" name="Getter_和_Setter_的定義">Getter 和 Setter 的定義</h3> + +<p>Getter 是用來取得指定屬性的值的方法。Setter 是用來設定指定屬性的值的方法。你可以在所有預先定義的核心物件或使用者定義的物件(這類可支援新屬性的附加)中定義 Getter 和 Setter。為了定義 Getter 和 Setter,需要使用物件的字面表達語法。</p> + +<p>自 JavaScript 1.8.1 起,在設定物件和陣列裡的初始化子的屬性時,不再可以呼叫 Setter。</p> + +<p>以下的 JS shell 會話說明了 Getter 和 Setter 是如何在使用者定義的物件 o 裡運作的。<a class="internal" href="/zh_tw/SpiderMonkey/JavaScript_shell_%E7%B0%A1%E4%BB%8B" title="zh tw/SpiderMonkey/JavaScript shell 簡介">JS shell</a> 是一種應用程式,可讓開發者在分批模式或互動性的測試 JavaScript 代碼。</p> + +<pre>js> var o = {a:7, get b() {return this.a+1;}, set c(x) {this.a = x/2}}; +[object Object] +js> o.a; +7 +js> o.b; +8 +js> o.c = 50; +js> o.a; +25 +</pre> + +<p><code>o</code> 物件的屬性為︰</p> + +<ul> + <li>o.a - 數字</li> + <li>o.b - 返回 o.a 加 1 的 Getter</li> + <li>o.c - 把 o.a 的值設為所屬的 o.c 的值的一半的 Setter</li> +</ul> + +<p>另一種(Mozilla 限定)表示成一行的方式,也支援在物件的屬性上(如 "foo<strong>-</strong>bar")設定 Getter 和 Setter,其中物件需要加上引號。</p> + +<pre>var o = {a:7, 'b' getter:function () {return this.a + 1;}, c setter:function (x) {this.a = x / 2;}};</pre> + +<p>請注意定義在物件的字面表達中的 Getter 和 Setter 的函數名稱使用的〝[gs]et <em>property</em>()〞(有別於稍後介紹的 <code>__define[GS]etter__</code>)並不是 Getter 本身的名稱,即使 <code>[gs]et <em>propertyName</em>(){ }</code> 語法可能會使你把他誤解成別的事物。若要命名在 Getter 或 Setter 之中的函數的名稱,就使用〝[gs]et <em>property</em>()〞語法,把 Getter 的名稱放在 get 或 set 後面,然後在其後面放上函數的名稱。下面的範例示範如何在物件的字面表達中命名 Getter 函數︰</p> + +<pre>var objects = [{get a b(){return 1}}, + {a getter:function b(){return 1}}, + {"a" getter:function b(){return 1}}]; + +for (var i=0; i<objects.length; ++i) + print(objects[i].__lookupGetter__("a")) // 為每一個 Getter 輸出 "function b(){return 1}"。 +</pre> + +<p>這次 JavaScript shell 會話說明 Getter 和 Setter 如何擴充 Date 的原型,給所有預先定義的 <code>Date</code> 類別的實體加入 year 屬性。他使用了 <code>Date</code> 類別中既存的 <code>getFullYear</code> 以及 <code>setFullYear</code> 方法,以支援 year 屬性的 Getter 和 Setter。</p> + +<p>以下語句針對 year 屬性定義 Getter 和 Setter︰</p> + +<pre>js> var d = Date.prototype; +js> d.__defineGetter__("year", function() { return this.getFullYear(); }); +js> d.__defineSetter__("year", function(y) { this.setFullYear(y); }); +</pre> + +<p>以下語句在 <code>Date</code> 物件中使用 Getter 和 Setter︰</p> + +<pre>js> var now = new Date; +js> print(now.year); +2000 +js> now.year = 2001; +987617605170 +js> print(now); +Wed Apr 18 11:13:25 GMT-0700 (Pacific Daylight Time) 2001 +</pre> + +<div class="note">在 JavaScript 1.5 的開發期間,這些是內含用來在既存的物件上定義新的 Getter 或 Setter 的 <code>getter =</code> 或 <code>setter =</code> 表達式的摘要,這些語法現在已被廢棄,將會在目前的 JS 1.5 引擎中引發警告,在未來的版本中將會變成語法錯誤。這些都應該要避免。</div> + +<h3 id="Summary" name="Summary">概要</h3> + +<p>原則上,Getter 和 Setter 可以</p> + +<ul> + <li>使用 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/%E7%89%A9%E4%BB%B6%E5%88%9D%E5%A7%8B%E5%8C%96%E5%AD%90%E7%9A%84%E4%BD%BF%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/新物件的建立/物件初始化子的使用">物件的初始化子</a> 定義,或</li> + <li>稍後在任意的時間點上對任意的物件使用 Getter 或 Setter 的添加方法來加入。</li> +</ul> + +<p>當要使用 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/%E7%89%A9%E4%BB%B6%E5%88%9D%E5%A7%8B%E5%8C%96%E5%AD%90%E7%9A%84%E4%BD%BF%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/新物件的建立/物件初始化子的使用">物件的初始化子</a> 定義 Getter 和 Setter 的時候,你所需要做的是在 Getter 方法的前面加上 <code>get</code> 以及在 Setter 方法的前面加上 <code>set</code>。當然,Getter 方法不可以接受參數,Setter 方法則只能有一個參數(用來設定的新值)。舉例如下︰</p> + +<pre class="eval">o = { + a:7, + <strong>get</strong> b() { return this.a+1; }, + <strong>set</strong> c(x) { this.a = x/2; } +}; +</pre> + +<p>也可以在物件建立之後的任何時間點上,使用兩個稱作 <code>__defineGetter__</code> 和 <code>__defineSetter__</code> 的特殊方法,把 Getter 和 Setter 加到物件裡。這兩個方法需要 Getter 或 Setter 的名稱以字串的形式作為第一個參數。第二個參數是用來呼叫的函數作為 Getter 或 Setter。舉例如下(延用之前的例子):</p> + +<pre class="eval">o.__defineGetter__("b", function() { return this.a+1; }); +o.__defineSetter__("c", function(x) { this.a = x/2; }); +</pre> + +<p>這兩種形式的選擇,取決於你的程式設計風格以及手上的工作。如果你已經在定義原型的時候,使用了物件的初始化子,或許你在大多數時候都會選擇第一種形式。這種形式更加密集且自然。然而,如果你需要稍後加入 Getter 和 Setter – 因為你並未編寫原型或實際的物件 – 這時第二種形式就是唯一可行的形式。第二種形式或許是 JavaScript 的動態性質中最佳的表現 – 但這會使代碼難以閱讀和理解。</p> + +<div class="note"> +<p>在 Firefox 3.0 以前,Getter 和 Setter 並不支援 DOM 元素。舊版本的 Firefox 會默默的出錯。如果需要這些例外,修改 HTMLElement 的原型 <code>(HTMLElement.prototype.__define{{ mediawiki.external('SG') }}etter__)</code>,並且避免拋出例外。</p> +在 Firefox 3.0 中,在已定義的原型上定義 Getter 或 Setter 將會拋出例外。必須事先刪除這些屬性。舊版本的 Firefox 則沒有這個問題。</div> + +<h3 id="參閱">參閱</h3> + +<ul> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E5%85%A8%E5%9F%9F%E7%89%A9%E4%BB%B6/%E7%89%A9%E4%BB%B6/defineGetter" title="zh tw/Core JavaScript 1.5 參考/全域物件/物件/defineGetter">__defineGetter__</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E5%85%A8%E5%9F%9F%E7%89%A9%E4%BB%B6/%E7%89%A9%E4%BB%B6/defineSetter" title="zh tw/Core JavaScript 1.5 參考/全域物件/物件/defineSetter">__defineSetter__</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E9%81%8B%E7%AE%97%E5%AD%90/%E7%89%B9%E6%AE%8A%E9%81%8B%E7%AE%97%E5%AD%90/get_%E9%81%8B%E7%AE%97%E5%AD%90" title="zh tw/Core JavaScript 1.5 參考/運算子/特殊運算子/get 運算子">get</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E9%81%8B%E7%AE%97%E5%AD%90/%E7%89%B9%E6%AE%8A%E9%81%8B%E7%AE%97%E5%AD%90/set_%E9%81%8B%E7%AE%97%E5%AD%90" title="zh tw/Core JavaScript 1.5 參考/運算子/特殊運算子/set 運算子">set</a></li> +</ul> + +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:使用_this_取得物件的參考", "Core_JavaScript_1.5_教學:新物件的建立:屬性的刪除") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/index.html new file mode 100644 index 0000000000..687b428275 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/index.html @@ -0,0 +1,18 @@ +--- +title: 新物件的建立 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立 +--- +<p> </p> +<h3 id="新物件的建立" name="新物件的建立">新物件的建立</h3> +<p>JavaScript 具備許多預先定義的物件。此外,你也可以建立你自己的物件。在 JavaScript 1.2 以後的版本中,你可以使用物件的初始化子來建立物件。另一個選擇是,你可以先建立建構子函數,然後使用這個函數以及 new 運算子來實體化物件。</p> +<ul> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/%E7%89%A9%E4%BB%B6%E5%88%9D%E5%A7%8B%E5%8C%96%E5%AD%90%E7%9A%84%E4%BD%BF%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/新物件的建立/物件初始化子的使用">物件初始化子的使用</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/%E5%BB%BA%E6%A7%8B%E5%AD%90%E5%87%BD%E6%95%B8%E7%9A%84%E4%BD%BF%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/新物件的建立/建構子函數的使用">建構子函數的使用</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/%E7%89%A9%E4%BB%B6%E5%B1%AC%E6%80%A7%E7%9A%84%E7%B4%A2%E5%BC%95" title="zh tw/Core JavaScript 1.5 教學/新物件的建立/物件屬性的索引">物件屬性的索引</a></li> + <li><a href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/%E9%87%9D%E5%B0%8D%E7%89%A9%E4%BB%B6%E7%9A%84%E9%A1%9E%E5%9E%8B%E5%AE%9A%E7%BE%A9%E5%B1%AC%E6%80%A7" title="zh_tw/Core_JavaScript_1.5_教學/新物件的建立/針對物件的類型定義屬性">針對物件的類型定義屬性</a></li> + <li><a href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/%E6%96%B9%E6%B3%95%E7%9A%84%E5%AE%9A%E7%BE%A9" title="zh_tw/Core_JavaScript_1.5_教學/新物件的建立/方法的定義">方法的定義</a></li> + <li><a href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/%E4%BD%BF%E7%94%A8_this_%E5%8F%96%E5%BE%97%E7%89%A9%E4%BB%B6%E7%9A%84%E5%8F%83%E8%80%83" title="zh_tw/Core_JavaScript_1.5_教學/新物件的建立/使用_this_取得物件的參考">使用 this 取得物件的參考</a></li> + <li><a href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/Getter_%E5%92%8C_Setter_%E7%9A%84%E5%AE%9A%E7%BE%A9" title="zh_tw/Core_JavaScript_1.5_教學/新物件的建立/Getter_和_Setter_的定義">Getter 和 Setter 的定義</a></li> + <li><a href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%96%B0%E7%89%A9%E4%BB%B6%E7%9A%84%E5%BB%BA%E7%AB%8B/%E5%B1%AC%E6%80%A7%E7%9A%84%E5%88%AA%E9%99%A4" title="zh_tw/Core_JavaScript_1.5_教學/新物件的建立/屬性的刪除">屬性的刪除</a></li> +</ul> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:物件和屬性", "Core_JavaScript_1.5_教學:新物件的建立:物件初始化子的使用") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/使用_this_取得物件的參考/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/使用_this_取得物件的參考/index.html new file mode 100644 index 0000000000..6af61628b5 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/使用_this_取得物件的參考/index.html @@ -0,0 +1,27 @@ +--- +title: 使用 this 取得物件的參考 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/使用_this_取得物件的參考 +--- +<p> </p> +<h3 id="使用_this_取得物件的參考" name="使用_this_取得物件的參考">使用 this 取得物件的參考</h3> +<p>JavaScript 有特別的關鍵字,<code>this</code>,你可以在方法內部使用,用來參考使用中的物件。舉例來說,假設你有稱為 <code>validate</code> 的函數可以檢驗物件的 value 屬性,傳入的參數是物件和上限、下限值︰</p> +<pre>function validate(obj, lowval, hival) { + if ((obj.value < lowval) || (obj.value > hival)) + alert("Invalid Value!"); +} +</pre> +<p>然後,你可以在每一個表單的 <code>onchange 事件處理器</code>中呼叫 <code>validate</code>,使用 <code>this</code> 把 <code>form</code> 元素傳給函數,如下所示︰</p> +<pre><input type="text" name="age" size="3" + onChange="validate(this, 18, 99)"> +</pre> +<p>一般來說,<code>this</code> 會參考方法裡的呼叫端物件。</p> +<p>如果和 <code>form</code> 的屬性結合使用<span style="font-family: monospace;">,</span><code>this</code> 可以參考使用中物件的親表單。在下面的範例中,表單 <code>myForm</code> 內含 <code>Text</code> 物件以及按鈕。當使用者按下按鈕,表單的名稱就會被設成 <code>Text</code> 物件裡的值。按鈕的 <code>onclick</code> 事件處理器使用 <code>this.form</code> 來參考親表單 <code>myForm</code>。</p> +<pre><form name="myForm"> +<p><label>Form name:<input type="text" name="text1" value="Beluga"></label> +<p><input name="button1" type="button" value="Show Form Name" + onclick="this.form.text1.value=this.form.name"> +</p> +</form> +</pre> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:方法的定義", "Core_JavaScript_1.5_教學:新物件的建立:Getter 和 Setter 的定義") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/屬性的刪除/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/屬性的刪除/index.html new file mode 100644 index 0000000000..ba099fa041 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/屬性的刪除/index.html @@ -0,0 +1,21 @@ +--- +title: 屬性的刪除 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/屬性的刪除 +--- +<p> </p> +<h3 id="屬性的刪除" name="屬性的刪除">屬性的刪除</h3> +<p>你可以使用 <code>delete</code> 運算子移除屬性。下面的代碼示範如何移除屬性︰</p> +<pre>// 建立新的物件 myobj,以及兩個屬性 a 和 b。 +myobj = new Object; +myobj.a = 5; +myobj.b = 12; + +// 移除一個屬性,只剩 b 屬性留在 myobj 裡。 +delete myobj.a; +</pre> +<p>你也可以使用 <code>delete</code> 來刪除全域變數,只要這個變數不是使用 <code>var</code> 關鍵字宣告的話︰</p> +<pre>g = 17; +delete g; +</pre> +<p>參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E9%81%8B%E7%AE%97%E5%AD%90/%E7%89%B9%E6%AE%8A%E9%81%8B%E7%AE%97%E5%AD%90#delete" title="zh tw/Core JavaScript 1.5 教學/運算子/特殊運算子#delete">delete</a> 取得更多資訊。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:Getter_和_Setter_的定義", "Core_JavaScript_1.5_教學:預先定義的核心物件") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/建構子函數的使用/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/建構子函數的使用/index.html new file mode 100644 index 0000000000..b9832bf245 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/建構子函數的使用/index.html @@ -0,0 +1,58 @@ +--- +title: 建構子函數的使用 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/建構子函數的使用 +--- +<p> </p> +<h3 id="建構子函數的使用" name="建構子函數的使用">建構子函數的使用</h3> +<p>還有一個選擇,你可以按照這兩個步驟來建立物件︰</p> +<ol> + <li>編寫建構子函數以完成物件類型的定義。</li> + <li>使用 new 建立物件的實體。</li> +</ol> +<p>若要定義物件類型,就指定物件類型的名稱、屬性、方法並建立函數。舉例來說,假設你想要給 car 建立物件類型。你希望這個物件的類型稱作<code> car</code>,而且你還希望他有 make、model、year 這些屬性。要做到這些,你需要編寫出以下的函數︰</p> +<pre>function car(make, model, year) { + this.make = make; + this.model = model; + this.year = year; +} +</pre> +<p>注意 <code>this</code> 是用來把傳送給函數的值代入給物件的屬性。</p> +<p>現在你可以建立稱作 <code>mycar</code> 的物件如下所示︰</p> +<pre>mycar = new car("Eagle", "Talon TSi", 1993); +</pre> +<p>這個語句建立 <code>mycar</code> 並且把指定的值代入給他自己的屬性。然後 <code>mycar.make</code> 的值是字串 "Eagle",<code>mycar.year</code> 是整數 1993,依此類推。</p> +<p>你可以藉由呼叫 <code>new</code> 來建立許多個 <code>car</code> 的物件。例如,</p> +<pre>kenscar = new car("Nissan", "300ZX", 1992); +vpgscar = new car("Mazda", "Miata", 1990); +</pre> +<p>物件可以有另一個物件本身的屬性。例如,假設你定義稱為 <code>person</code> 的物件如下︰</p> +<pre>function person(name, age, sex) { + this.name = name; + this.age = age; + this.sex = sex; +} +</pre> +<p>然後實體化兩個新的 person 物件如下︰</p> +<pre>rand = new person("Rand McKinnon", 33, "M"); +ken = new person("Ken Jones", 39, "M"); +</pre> +<p>然後你可以改寫 car 的定義,加入用來接受 <code>person</code> 物件的 owner 屬性,如下︰</p> +<pre>function car(make, model, year, owner) { + this.make = make; + this.model = model; + this.year = year; + this.owner = owner; +} +</pre> +<p>若要實體化新的物件,你可以如下使用︰</p> +<pre>car1 = new car("Eagle", "Talon TSi", 1993, rand); +car2 = new car("Nissan", "300ZX", 1992, ken); +</pre> +<p>注意,當建立新的物件的時候,傳入的並不是字面表達字串或整數值,上面的語句把 <code>rand</code> 和 <code>ken</code> 物件當作參數傳給 owners。然後如果你希望找出 car2 的 owner 的名稱,你可以如下存取屬性︰</p> +<pre>car2.owner.name +</pre> +<p>注意,你永遠可以給之前定義的物件加入屬性。例如,語句</p> +<pre>car1.color = "black" +</pre> +<p>把 <code>color</code> 屬性加入給 car1,並且把 "black" 的值代入給新加入的屬性。然而,這樣並不能影響到其他的任何物件。若要給所有同樣類型的物件加入新的屬性,你必須把新的屬性加入到 car 物件類型的定義。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:物件初始化子的使用", "Core_JavaScript_1.5_教學:新物件的建立:物件屬性的索引") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/方法的定義/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/方法的定義/index.html new file mode 100644 index 0000000000..67a9250b8e --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/方法的定義/index.html @@ -0,0 +1,40 @@ +--- +title: 方法的定義 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/方法的定義 +--- +<p> </p> +<h3 id="方法的定義" name="方法的定義">方法的定義</h3> +<p><em>方法</em>就是和物件連繫在一起的函數。定義方法和定義標準函數的方式皆相同。然後使用下面的語句把函數和現存的物件連繫在一起︰</p> +<pre>object.methodname = function_name +</pre> +<p>此處的 <code>object</code> 就是現存的物件,<code>methodname</code> 就是分配給方法的名稱,<code>function_name</code> 就是函數的名稱。</p> +<p>然後你可以呼叫物件中的方法如下︰</p> +<pre>object.methodname(params); +</pre> +<p>你可以藉由含入物件的建構子函數裡的方法定義,針對物件的類型來定義方法。例如,你可以定義函數,用來格式化並顯示先前定義的 car 物件的屬性。例如,</p> +<pre>function displayCar() { + var result = "A Beautiful " + this.year + " " + this.make + + " " + this.model; + pretty_print(result); +} +</pre> +<p>此處的 <code>pretty_print</code> 是用來顯示水平格線和字串的函數。注意 <code>this</code> 是用來參考方法所屬的物件。</p> +<p>你可以在物件的定義中加上如下語句,把這個函數作為 car 的方法。</p> +<pre>this.displayCar = displayCar; +</pre> +<p>於是,<code>car</code> 的完整定義就會變成這樣</p> +<pre>function car(make, model, year, owner) { + this.make = make; + this.model = model; + this.year = year; + this.owner = owner; + this.displayCar = displayCar; +} +</pre> +<p>然後你可以給每一個物件呼叫 <code>displayCar</code> 方法如下︰</p> +<pre>car1.displayCar() +car2.displayCar() +</pre> +<p>產生的輸出顯示在下圖中。</p> +<p><img alt="Image:obja.gif" class="internal" src="/@api/deki/files/786/=Obja.gif"> <span style="font-weight: bold;">圖</span><small><strong> 7.1: 方法的輸出的顯示</strong></small></p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:針對物件的類型定義屬性", "Core_JavaScript_1.5_教學:新物件的建立:使用_this_取得物件的參考") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/物件初始化子的使用/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/物件初始化子的使用/index.html new file mode 100644 index 0000000000..79b7e5041b --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/物件初始化子的使用/index.html @@ -0,0 +1,23 @@ +--- +title: 物件初始化子的使用 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/物件初始化子的使用 +--- +<p> </p> +<h3 id="物件初始化子的使用" name="物件初始化子的使用">物件初始化子的使用</h3> +<p>除了使用建構子函數來建立物件以外,你也可以使用物件的初始化子來建立物件。使用物件的初始化子,有時又被稱為以字面表達記法來建立物件。「物件初始化子」與 C++ 的術語一致。</p> +<p>使用物件初始化子的語句如下︰</p> +<pre class="eval">var obj = { property_1: value_1, // 通常以 property_# 代表識別子... + 2: value_2, // 或者使用數字... + ..., + "property_n": value_n }; // 或者使用字串</pre> +<p>此處的 <code>obj</code> 就是新物件的名稱,每一個 <code>property_<em>i</em></code> 都是識別子(可以是名稱、數字、字串的字面表達),而且每一個 <code>value_<em>i</em></code> 都是表達式,其值會代入給 <code>property_<em>i</em></code>。<code>obj</code> 和代入動作不是必要的;如果你不需要在其他地方參考這個物件,你就不需要把物件代入給變數。(注意,你也許需要以圓括弧代替花括弧來包裝物件的字面表達,如果預期物件出現的地方會有其他語句,就要避免和區塊語法相混淆。)</p> +<p>如果物件是在最頂層的 Script 中以物件初始化子來建立的,每一次要對內含該物件的字面表達求值時,JavaScript 就會把他解譯成物件。此外,用在函數裡的初始化子,會在每一次呼叫函數的時候建立。</p> +<p>以下的語句建立物件,並把他代入給變數 <code>x</code>,但只在表達式的條件為 true 時如此。</p> +<pre class="eval">if (cond) x = {hi:"there"}; +</pre> +<p>以下例子使用了三個屬性來建立 <code>myHonda</code>。注意,<code>engine</code> 屬性也是物件,並連結有自己的屬性。</p> +<pre class="eval">var myHonda = {color:"red",wheels:4,engine:{cylinders:4,size:2.2}}; +</pre> +<p>你也可以使用物件的初始化子來建立陣列。參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E5%AD%97%E9%9D%A2%E8%A1%A8%E9%81%94#%E9%99%A3%E5%88%97%E7%9A%84%E5%AD%97%E9%9D%A2%E8%A1%A8%E9%81%94" title="zh tw/Core JavaScript 1.5 教學/字面表達#陣列的字面表達">陣列的字面表達</a>。</p> +<p>在 JavaScript 1.1 以後的版本中,你無法再使用物件的初始化子。你只能使用他們的建構子函數或者使用由某些其他用途的物件所提供的函數來建立物件。參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E5%BB%BA%E7%AB%8B%E6%96%B0%E7%9A%84%E7%89%A9%E4%BB%B6/%E5%BB%BA%E6%A7%8B%E5%AD%90%E5%87%BD%E6%95%B8%E7%9A%84%E4%BD%BF%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/建立新的物件/建構子函數的使用">建構子函數的使用</a>。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立", "Core_JavaScript_1.5_教學:新物件的建立:建構子函數的使用") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/物件屬性的索引/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/物件屬性的索引/index.html new file mode 100644 index 0000000000..08e243c78b --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/物件屬性的索引/index.html @@ -0,0 +1,10 @@ +--- +title: 物件屬性的索引 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/物件屬性的索引 +--- +<p> </p> +<h3 id="物件屬性的索引" name="物件屬性的索引">物件屬性的索引</h3> +<p>在 JavaScript 1.0 中,你可以使用物件的屬性名稱或序號索引來參考物件的屬性。然而,在 JavaScript 1.1 以後的版本中,如果你最初使用名稱來定義屬性,你就必須永遠使用名稱來參考屬性,如果你最初使用索引來定義屬性,你就必須永遠使用索引來參考屬性。</p> +<p>這些限制出現在,當你使用建構子函數來建立物件及其屬性的時候(例如我們之前的 Car 物件類型),以及當你明確的定義個別的屬性的時候(例如,<code>myCar.color = "red"</code>)。如果你最初使用索引來定義物件的屬性,如 <code>myCar{{ mediawiki.external(5) }} = "25 mpg"</code>,隨後你只能以 <code>myCar{{ mediawiki.external(5) }}</code> 來參考這個屬性。</p> +<p>這個規則的例外是從 HTML 反映過來的物件,如 <code>forms</code> 陣列。你永遠可以使用序號(以在文件中出現的位置為基準)或他們的名稱(如果有定義的話)來參考這些陣列。舉例來說,如果在文件中的第二個 <code><FORM></code> 標記中有 "myForm" 的 <code>NAME</code> 屬性,你可以使用 <code>document.forms{{ mediawiki.external(1) }}</code> 或 <code>document.forms{{ mediawiki.external('\"myForm\"') }}</code> 或 <code>document.myForm</code> 來參考表單。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:建構子函數的使用", "Core_JavaScript_1.5_教學:新物件的建立:針對物件的類型定義屬性") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/針對物件的類型定義屬性/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/針對物件的類型定義屬性/index.html new file mode 100644 index 0000000000..0d1e55ac71 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/新物件的建立/針對物件的類型定義屬性/index.html @@ -0,0 +1,12 @@ +--- +title: 針對物件的類型定義屬性 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/針對物件的類型定義屬性 +--- +<p> </p> +<h3 id="針對物件的類型定義屬性" name="針對物件的類型定義屬性">針對物件的類型定義屬性</h3> +<p>你可以透過 <code>prototype</code> 屬性的使用來給之前定義的物件加入新的屬性。這種屬性的定義方式可以共用給所有指定類型的物件,而不只是針對單一的物件實體。以下代碼給所有的 <code>car</code> 類型的物件加入 <code>color</code> 屬性,然後把值代入給 <code>car1</code> 物件的 <code>color</code> 屬性。</p> +<pre>Car.prototype.color=null; +car1.color="black"; +</pre> +<p>參閱 <a href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83" title="zh_tw/Core_JavaScript_1.5_參考">Core JavaScript 參考</a>・函數物件・<a href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E5%85%A8%E5%9F%9F%E7%89%A9%E4%BB%B6/%E5%87%BD%E6%95%B8#%E5%B1%AC%E6%80%A7" title="zh_tw/Core_JavaScript_1.5_參考/全域物件/函數#屬性"><code>prototype</code> 屬性</a> 以取得更多資訊。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:物件屬性的索引", "Core_JavaScript_1.5_教學:新物件的建立:方法的定義") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/正規表達式模式的編寫/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/正規表達式模式的編寫/index.html new file mode 100644 index 0000000000..e07b2f6aa4 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/正規表達式模式的編寫/index.html @@ -0,0 +1,184 @@ +--- +title: 正規表達式模式的編寫 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/正規表達式模式的編寫 +--- +<p>正規表達式的模式是由簡單的字元所組成,如 <code>/abc/</code>,或由簡單的和特殊的字元所組成,如 <code>/ab*c/</code> 或 <code>/Chapter (\d+)\.\d*/</code>。後者含有用來記憶的括弧。以模式的某一部分所產生的比對結果會被記憶起來以供稍後使用,已在 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%AD%A3%E5%89%87%E8%A1%A8%E9%81%94%E5%BC%8F%E7%9A%84%E9%81%8B%E7%94%A8/%E6%8B%AC%E5%BC%A7%E5%AD%90%E5%AD%97%E4%B8%B2%E7%9A%84%E6%AF%94%E5%B0%8D%E7%B5%90%E6%9E%9C%E7%9A%84%E9%81%8B%E7%94%A8" title="zh tw/Core JavaScript 1.5 教學/正則表達式的運用/括弧子字串的比對結果的運用">括弧子字串的比對結果的運用</a> 一文中解說。</p> +<h2 id="簡單模式的使用" name="簡單模式的使用">簡單模式的使用</h2> +<p>簡單的模式直接由想要尋找的字元所組成。例如,<code>/abc/</code> 的模式只在字元 'abc' 以同樣順序一起出現時,比對出字串裡的字元。在字串 "Hi, do you know your abc's?" 和 "The latest airplane designs evolved from slabcraft." 中將會比對成功。在兩個例子中,都比對出子字串 'abc'。在字串 "Grab crab" 中沒有比對結果,因為字串裡並未含有子字串 'abc'。</p> +<h2 id="特殊字元的使用" name="特殊字元的使用">特殊字元的使用</h2> +<p>當搜尋的需求遠遠超出直接比對的能力時,如尋找 1 個以上的全部的 b,或是尋找含有特殊字元的空白部分。舉例來說,<code>/ab*c/</code> 的模式可比對出所有以 'a' 後接 0 個以上的全部的 'b'(* 的意思是前項出現 0 個以上)並緊接者 'c' 的字元。在字串 "cbbabbbbcdebc" 裡,可以比對出子字串 'abbbbc'。</p> +<p>下表提供完整的列表,並解說可用於正規表達式的特殊字元。</p> +<table class="fullwidth-table"> + <tbody> + <tr> + <th>字元</th> + <th>意義</th> + </tr> + <tr> + <td>\</td> + <td>可分為以下兩種︰ + <ul> + <li>對於那些沒有特殊意義的字元,反斜線可指示下一個字元為特殊的、不照字面解譯。舉例來說,<code>/b/ </code> 比對字元 'b'。藉由在 b 前面放置反斜線,也就是使用 <code>/\b/</code>,這個字元的特殊意義就變成比對文字的邊界。</li> + <li>對於那些有特別意義的字元,就利用反斜線指示下一個字元並非特殊的、應該照字面解譯。舉例來說,* 是一個意義為前項出現 0 個以上的特殊字元。例如,<code>/a*/</code> 意思是比對 0 個以上的全部的 a。如果要照字面比對 *,就在前面加上反斜線。例如,<code>/a\*/</code> 比對出 'a*'。</li> + </ul> + </td> + </tr> + <tr> + <td>^</td> + <td>比對輸入的開頭處。如果把多行標誌設為 true,也會比對緊接在換行字元之後的字元。舉例來說,<code>/^A/</code> 不會在 "an A" 裡比對出 'A',但會在 "An A" 裡比對出第一個 'A'。</td> + </tr> + <tr> + <td>$</td> + <td>比對輸入的末尾處。如果把多行標誌設為 true,也會比對緊接在換行字元之前的字元。舉例來說,<code>/t$/</code> 不會在 "eater" 裡比對出 't',但會在 "eat" 裡比對出來。</td> + </tr> + <tr> + <td>*</td> + <td>比對前面的字元 0 次以上。舉例來說,<code>/bo*/</code> 在 "A ghost booooed" 比對出 'boooo',並在 "A bird warbled" 比對出 'b',但不會在 "A goat grunted" 比對出來。</td> + </tr> + <tr> + <td>+</td> + <td>比對前面的字元 1 次以上。等價於 {1,}。舉例來說,<code>/a+/</code> 在 "candy" 比對出 'a',並在 "caaaaaaandy" 比對出所有的 a。</td> + </tr> + <tr> + <td>?</td> + <td>比對前面的字元 0 次或 1 次。 + <p>舉例來說,<code>/e?le?/</code> 在 "angel" 比對出 'el',並在 "angle" 比對出 'le'。</p> + <p>如果緊接在任何一個數量子 *、+、?、{} 之後來使用,將使數量子非貪婪(比對出最小的次數),而預設值是貪婪的(比對出最大的次數)。舉例來說,使用 <code>/\d+/</code> 比對 "123abc" 便返回 "123",如果使用 <code>/\d+?/</code>,只有 "1" 會被比對出來。</p> + 也用於表示預讀,在本表的 x(?=y) 和 x(?!y) 中有說明。</td> + </tr> + <tr> + <td>.</td> + <td>小數點比對任意的單一字元,除了換行字元以外。舉例來說,<code>/.n/</code> 在 "nay, an apple is on the tree" 比對出 'an' 和 'on',而非 'nay'。</td> + </tr> + <tr> + <td>(x)</td> + <td>比對 'x' 並記憶此項比對結果。又稱為截取括弧(capturing parentheses)。舉例來說,<code>/(foo)/</code> 在 "foo bar" 裡比對出並記憶 'foo'。比對出來的子字串可以從比對結果的陣列的元素 <code>1</code>, ..., <code>n</code> 取回。</td> + </tr> + <tr> + <td>(?:x)</td> + <td>比對 'x' 但不記憶此項比對結果。又稱為非截取括弧。比對出來的子字串無法從比對結果的陣列的元素 <code>1</code>, ..., <code>n</code> 取回。</td> + </tr> + <tr> + <td>x(?=y)</td> + <td>比對 'x' 但只在 'x' 後面接續著 'y' 的時候。舉例來說,<code>/Jack(?=Sprat)/</code> 只在後面接續著 'Sprat' 的時候比對出 'Jack'。<code>/Jack(?=Sprat|Frost)/</code> 只在後面接續著 'Sprat' 或 'Frost' 的時候比對出 'Jack'。然而,'Sprat' 或 'Frost' 都不是比對結果的一部分。</td> + </tr> + <tr> + <td>x(?!y)</td> + <td>比對 'x' 但只在 'x' 後面沒有接續著 'y' 的時候。舉例來說,<code>/\d+(?!\.)/</code> 只在後面沒有接續著小數點的時候比對出數字。正規表達式 <code>/\d+(?!\.)/.exec("3.141")</code> 比對出 '141' 而非 '3.141'。</td> + </tr> + <tr> + <td>x|y</td> + <td>比對 'x' 或 'y'。舉例來說,<code>/green|red/</code> 在 "green apple" 比對出 'green',並在 "red apple"比對出 'red'。</td> + </tr> + <tr> + <td>{n}</td> + <td>在此 n 是正整數。比對出恰好有 n 個的前面的字元。舉例來說,<code>/a{2}/</code> 不會在 "candy" 裡比對出 'a',但在 "caandy" 裡比對出全部的 a,並在 "caaandy" 裡比對出前兩個 a。</td> + </tr> + <tr> + <td>{n,}</td> + <td>在此 n 是正整數。比對出至少 n 個的前面的字元。舉例來說,<code>/a{2,}/</code> 不會在 "candy" 裡比對出 'a',但在 "caandy" 還有在 "caaaaaaandy" 裡比對出全部的 a。</td> + </tr> + <tr> + <td>{n,m}</td> + <td>在此 n 和 m 是正整數。比對出至少 n 個且至多 m 個的前面的字元。舉例來說,<code>/a{1,3}/</code> 在 "cndy" 裡比對不出來,但在 "candy" 比對出 'a',在 "caandy" 比對出前兩個 a,並在 "caaaaaaandy" 比對出前三個 a,注意,當比對 "caaaaaaandy" 的時候,比對的是 "aaa",即使字串裡有更多的 a。</td> + </tr> + <tr> + <td><code>xyz</code></td> + <td>字元集。比對出包含在括號裡的其中任何一個字元。你可以使用連接符號 (-) 指定字元的範圍。舉例來說,<code>abcd</code> 等於 <code>a-d</code>。這些都能在 "brisket" 裡比對 'b',並在 "city" 裡比對 'c'。</td> + </tr> + <tr> + <td>^xyz</td> + <td>字元否定集、或字元補集。也就是比對出任何不包含在括號裡的一切。你可以使用連接符號 (-) 指定字元的範圍。舉例來說,<code>^abc</code> 等於 <code>^a-c</code>。這些都能在 "brisket" 裡比對出第一個字母 'r',並在 "chop" 比對出 'h'。</td> + </tr> + <tr> + <td>\\b</td> + <td>比對退格。(別和 \b 混淆。)</td> + </tr> + <tr> + <td>\b</td> + <td>比對文字邊界,如空白或換行字元。(別和 <code>\\b</code> 混淆。)舉例來說,<code>/\bn\w/</code> 在 "noonday" 裡比對出 'no',<code>/\wy\b/</code> 在 "possibly yesterday" 比對出 'ly'。</td> + </tr> + <tr> + <td>\B</td> + <td>比對非文字邊界。舉例來說,<code>/\w\Bn/</code> 在 "noonday" 裡比對出 'on',<code>/y\B\w/</code> 在 "possibly yesterday" 裡比對出 'ye'。</td> + </tr> + <tr> + <td>\cX</td> + <td>在此 X 是控制字元。在字串中比對控制字元。舉例來說,<code>/\cM/</code> 在字串裡比對出 control-M。</td> + </tr> + <tr> + <td>\d</td> + <td>比對數字字元。等於 <code>0-9</code>。舉例來說,<code>/\d/</code> 或 <code>/0-9/</code> 都在 "B2 is the suite number" 比對出 '2'。</td> + </tr> + <tr> + <td>\D</td> + <td>比對非數字字元。等於 <code>^0-9</code>。舉例來說,<code>/\D/</code> 或 <code>/^0-9/</code> 都在 "B2 is the suite number" 比對出 'B'。</td> + </tr> + <tr> + <td>\f</td> + <td>比對換頁(form-feed)。</td> + </tr> + <tr> + <td>\n</td> + <td>比對換行。</td> + </tr> + <tr> + <td>\r</td> + <td>比對歸位。</td> + </tr> + <tr> + <td>\s</td> + <td>比對單一空白字元,包括空白、TAB、換頁、換行。等於 + <p><code>\\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029</code>。</p> + 舉例來說,<code>/\s\w*/</code> 在 "foo bar" 裡比對出 ' bar'。</td> + </tr> + <tr> + <td>\S</td> + <td>比對除了空白字元以外的單一字元。等於 + <p><code>^ \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029</code>。</p> + 舉例來說,<code>/\S\w*/</code> 在 "foo bar" 裡比對出 'foo'。</td> + </tr> + <tr> + <td>\t</td> + <td>比對 TAB。</td> + </tr> + <tr> + <td>\v</td> + <td>比對垂直 TAB。</td> + </tr> + <tr> + <td>\w</td> + <td>比對任何字母和數字的字元,包括底線。等於 A-Za-z0-9_。舉例來說,<code>/\w/</code> 在 "apple" 裡比對出 'a',在 "$5.28" 裡比對出 '5',並在 "3D" 比對出 '3'。</td> + </tr> + <tr> + <td>\W</td> + <td>比對任何非字母和數字的字元。等於 {{ mediawiki.external('^A-Za-z0-9_') }}。舉例來說,<code>/\W/</code> 或 <code>/{{ mediawiki.external('^A-Za-z0-9_') }}/</code> 在 "50%" 裡比對出 '%'。</td> + </tr> + <tr> + <td>\n</td> + <td>在此 n 是正整數。回向參考在正規表達式中的第 n 個括弧中比對的最後的子字串(對左括弧計數)。舉例來說,<code>/apple(,)\sorange\1/</code> 在 "apple, orange, cherry, peach" 裡比對出 'apple, orange,'。</td> + </tr> + <tr> + <td>\0</td> + <td>比對 NUL 字元。後面不可以接續其他數字。</td> + </tr> + <tr> + <td>\xhh</td> + <td>比對內碼為 hh 的字元(兩個十六進位數)</td> + </tr> + <tr> + <td>\uhhhh</td> + <td>比對內碼為 hhhh 的字元(四個十六進位數)</td> + </tr> + </tbody> +</table> +<p><small><strong>表 4.1: 正規表達式裡的特殊字元。</strong></small></p> +<h2 id="括弧的使用" name="括弧的使用">括弧的使用</h2> +<p>使用括弧把正規表達式的模式的某一部分括起來,就會記憶那部分被比對出來的子字串。一經記憶,就可以在其他地方取回並使用。可在 <a class="new internal" href="/../../../../zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%AD%A3%E5%89%87%E8%A1%A8%E9%81%94%E5%BC%8F%E7%9A%84%E9%81%8B%E7%94%A8/%E6%8B%AC%E5%BC%A7%E5%AD%90%E5%AD%97%E4%B8%B2%E7%9A%84%E6%AF%94%E5%B0%8D%E7%B5%90%E6%9E%9C%E7%9A%84%E9%81%8B%E7%94%A8" rel="internal" title="../../../../zh tw/Core JavaScript 1.5 教學/正則表達式的運用/括弧子字串的比對結果的運用">括弧子字串的比對結果的運用</a> 一文中找到說明。</p> +<p>舉例來說,以 <code>/Chapter (\d+)\.\d*/</code> 的模式來解說額外的跳脫和特殊字元,那些用來指示某一部分模式需要記憶的部分。他會比對恰好是 'Chapter ' 的字元,隨後是 1 個以上的數字(\d 的意思是任意數字字元,+ 的意思是 1 次以上),隨後是一個小數點(點本身是特殊字元,前面附上 \ 的點的意思是這個模式必須尋找字面為 '.' 的字元),隨後是任何 0 個以上的數字(\d 的意思是任意數字字元,* 的意思是 0 次以上)。此外,括弧被用來記憶第一次比對出來的數字字元。</p> +<p>在 "Open Chapter 4.3, paragraph 6" 裡可以找出這個模式,且 '4' 會被記憶。在 "Chapter 3 and 4" 裡則找不出這個模式,因為字串裡的 '3' 後面沒有點。</p> +<p>若要比對子字串,且不要記憶比對出來的那一部分,可在括弧裡面的最前面加上 <code>?:</code>。舉例來說,<code>(?:\d+)</code> 比對 1 個以上的數字字元,但不會記憶那些比對出來的字元。</p> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:正規表達式的建立", "Core_JavaScript_1.5_教學:正規表達式的運用") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/正規表達式的建立/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/正規表達式的建立/index.html new file mode 100644 index 0000000000..ffeee0f5c7 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/正規表達式的建立/index.html @@ -0,0 +1,34 @@ +--- +title: 正規表達式的建立 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/正規表達式的建立 +--- +<h3 id="正則表達式的建立" name="正則表達式的建立">正規表達式的建立</h3> +<p>正規表達式有兩種建構方式︰</p> +<ul> + <li>使用正規表達式的字面表達,如下︰</li> +</ul> +<pre> re = /ab+c/; </pre> +<dl> + <dd> + <dl> + <dd> + 正規表達式的字面表達會在對 Script 求值時提供正規表達式的編譯產物。這時正規表達式將成為常數而遺留下來,採用這個方式可以得到較好的效能。</dd> + </dl> + </dd> +</dl> +<ul> + <li>呼叫 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E5%85%A8%E5%9F%9F%E7%89%A9%E4%BB%B6/RegExp" title="zh tw/Core JavaScript 1.5 參考/全域物件/RegExp">RegExp</a> 物件的建構子函數,如下︰</li> +</ul> +<pre> re = new RegExp("ab+c"); </pre> +<dl> + <dd> + <dl> + <dd> + 使用建構子函數可在執行時期提供正規表達式的編譯產物。當你知道正規表達式的模式將會變更時,或者當你無法預知取自其他來源的模式(如使用者的輸入)時,就使用建構子函數。</dd> + </dl> + </dd> +</dl> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:運算子:特殊運算子", "Core_JavaScript_1.5_教學:正規表達式模式的編寫") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/正規表達式的運用/正規表達式的範例/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/正規表達式的運用/正規表達式的範例/index.html new file mode 100644 index 0000000000..0bd61d90e5 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/正規表達式的運用/正規表達式的範例/index.html @@ -0,0 +1,114 @@ +--- +title: 正規表達式的範例 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/正規表達式的運用/正規表達式的範例 +--- +<h3 id="範例" name="範例">範例</h3> +<p>以下範例示範正規表達式的一些用法。</p> +<h4 id="改變輸入字串的順序" name="改變輸入字串的順序">改變輸入字串的順序</h4> +<p>以下範例解說了正規表達式的構造,以及 <code>string.split()</code> 和 <code>string.replace()</code> 的用法。他會整理凌亂的格式化輸入字串,字串中內含以空白、TAB、和唯一的分號所分割的姓名(名字在前)。最後,他會調換姓名的順序(姓氏在前)並重新排序列表。</p> +<pre><script type="text/javascript"> + +// 內含很多空白和 TAB 的 names 字串, +// 在名字和姓氏之間也會有很多空白。 +var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand "; + +var output = new Array( + "---------- Original String<br><br>", + names + "<br><br>"); + +// 預備兩個正規表達式的模式和儲存用的陣列。 +// 把字串分割存入陣列元素裡。 + +// 模式︰可能的空白,然後是分號,然後是可能的空白 +var pattern = /\s*;\s*/; + +// 使用上面的模式把字串分割成多個斷片, +// 並且把斷片儲存至稱為 nameList 的陣列。 +var nameList = names.split(pattern); + +// 新的模式︰1 個以上的字元,然後是空白字元,然後是 1 個以上的字元。 +// 使用括弧來記憶模式的某一部分。 +// 已記憶的部分稍後會被參考。 +var pattern = /(\w+)\s+(\w+)/; + +// 用來保存已處理的姓名的新陣列。 +var bySurnameList = new Array(); + +// 顯示 names 陣列,並移動以逗號分隔且姓氏在前的姓名到新的陣列。 +// +// replace 方法除去符合模式的所有內容,並以已記憶的字串取代。 +// 字串是以第二個已記憶的部分、後接逗號和空格、後接第一個已記憶的部分所組成。 +// +// 變數 $1 和 $2 參考了符合模式的已記憶的部分。 + +output.push("---------- After Split by Regular Expression<br>"); + +var i, len; +for (i = 0, len = nameList.length; i < len; i++) +{ + output.push(nameList[i] + "<br>"); + bySurnameList[i] = nameList[i].replace(pattern, "$2, $1") +} + +// 顯示新的陣列。 +output.push("---------- Names Reversed<br>"); +for (i = 0, len = bySurnameList.length; i < len; i++) +{ + output.push(bySurnameList[i] + "<br>") +} + +// 以姓氏來排序,然後顯示已排序的陣列。 +bySurnameList.sort(); +output.push("---------- Sorted<br>"); +for (i = 0, len = bySurnameList.length; i < len; i++) +{ + output.push(bySurnameList[i] + "<br>") +} + +output.push("---------- End<br>"); + +document.write(output.join("\n")); + +</script> +</pre> +<h4 id="使用特殊字元來對輸入進行驗證" name="使用特殊字元來對輸入進行驗證">使用特殊字元來對輸入進行驗證</h4> +<p>在以下的範例中,有位使用者輸入電話號碼。當使用者按下 Enter 時,Script 就會檢查電話號碼的有效性。如果電話號碼有效(符合由正規表達式所指定的字元序列),Script 在視窗上表示感謝使用者,並確認了電話號碼。如果電話號碼無效,Script 在視窗上表示使用者的電話號碼有誤的資訊。</p> +<p>正規表達式尋找 0 或 1 個左括弧 <code>\(?</code>,後接三個數字 <code>\d{3}</code>,後接 0 或 1 個右括弧 <code>\)?</code>,如果有的話,就後接橫線 (-) 或斜線 (\) 或小數點 (.),並記憶字元 <code>(-\\/\\.)</code>,後接三個數字 <code>\d{3}</code>,後接已記憶的橫線、斜線、小數點的比對結果 <code>\1</code>,後接四個數字 <code>\d{4}</code>。</p> +<p>當使用者按下 Enter 設定 <code>RegExp.input</code> 的值時,就會發動 <code>Change</code> 事件。</p> +<pre><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/html4/loose.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <meta http-equiv="Content-Script-Type" content="text/javascript"> + <script type="text/javascript"> + var re = /\(?\d{3}\)?([-\/\.])\d{3}\1\d{4}/; + + function testInfo(phoneInput) + { + var OK = re.exec(phoneInput.value); + + if (!OK) + { + window.alert(RegExp.input + " isn't a phone number with area code!"); + } + else + { + window.alert("Thanks, your phone number is " + OK[0]); + } + } + </script> + </head> + + <body> + <p>Enter your phone number (with area code) and then press Enter.</p> + <form action=""> + <input name="phone" onchange="testInfo(this);"> + </form> + </body> +</html> +</pre> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:正規表達式的運用:使用標誌的進階搜尋", "Core_JavaScript_1.5_教學:區塊語法") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/物件的操作語法/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/物件的操作語法/index.html new file mode 100644 index 0000000000..f1e46206fe --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/物件的操作語法/index.html @@ -0,0 +1,53 @@ +--- +title: 物件的操作語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/物件的操作語法 +--- +<h3 id="物件的操作語法" name="物件的操作語法">物件的操作語法</h3> +<p>JavaScript 使用 <code>for...in</code>、<code>for each...in</code>、<code>with</code> 語法來操作物件。</p> +<h4 id="for...in_語法" name="for...in_語法">for...in 語法</h4> +<p><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for...in" title="zh tw/Core JavaScript 1.5 參考/語法/for...in"><code>for...in</code></a> 語法可處理對應物件的所有屬性的指定變數。JavaScript 會對每一個對應的屬性來執行指定的語句。<code>for...in</code> 語句如下︰</p> +<pre>for (variable in object) { + statements +} +</pre> +<p><strong>範例</strong><br> + 以下函數接受物件和物件的名稱作為自己的參數。然後函數反覆遍歷物件的屬性,並返回列出屬性名稱和值的字串。</p> +<pre>function dump_props(obj, obj_name) { + var result = ""; + for (var i in obj) { + result += obj_name + "." + i + " = " + obj[i] + "<br>"; + } + result += "<hr>"; + return result; +} +</pre> +<p>以帶有屬性 <code>make</code> 和 <code>model</code> 的物件 <code>car</code> 為例,輸出結果如下︰</p> +<pre class="eval">car.make = Ford +car.model = Mustang +</pre> +<p><strong>陣列</strong><br> + 雖然使用這個方法來處理所有的 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E5%85%A8%E5%9F%9F%E7%89%A9%E4%BB%B6/Array" title="zh tw/Core JavaScript 1.5 參考/全域物件/Array">Array</a> 元素很是誘人,但如果你修改了 Array 物件,例如加入自訂的屬性或方法,<strong>for...in</strong> 語法就只會處理除了陣列元素以外的所有使用者定義的屬性,<strong>for...in</strong> 語法將會返回你的使用者定義的屬性的名稱,除了數字索引以外。因此在處理陣列時,最好還是使用傳統的 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for" title="zh tw/Core JavaScript 1.5 參考/語法/for">for</a> 循環,並配合數字索引。</p> +<h4 id="for_each...in_語法" name="for_each...in_語法">for each...in 語法</h4> +<p><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for_each...in" title="zh tw/Core JavaScript 1.5 參考/語法/for each...in"><code>for each...in</code></a> 是在 <a class="internal" href="/zh_tw/JavaScript_1.6_%E6%96%B0%E9%AE%AE%E4%BA%8B" title="zh tw/JavaScript 1.6 新鮮事">JavaScript 1.6</a> 中引入的循環語法,他很類似 <code>for...in</code>,但不是針對物件的屬性的名稱,而是物件的屬性的值。</p> +<h4 id="with_語法" name="with_語法">with 語法</h4> +<p><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/with" title="zh tw/Core JavaScript 1.5 參考/語法/with"><code>with</code></a> 語法為一整組的語句確立了預設的物件。JavaScript 會在一整組語法之內找出所有不合格的名稱,只要這個名稱是預設物件的屬性,就會將其確定。如果有一個不合格的名稱符合其中一個屬性,然後就會在語句中使用這個屬性。否則,就會被當成局域或全域的變數。</p> +<p><code>with</code> 語法如下︰</p> +<pre>with (object) { + statements +} +</pre> +<p><strong>範例</strong><br> + 以下 <code>with</code> 語法指定 <code>Math</code> 物件為預設的物件。<code>with</code> 語法裡面使用了 <code>PI</code> 屬性和 <code>cos</code>、<code>sin</code> 方法的語句,而無需指定物件。JavaScript 會假定他們參照的是 <code>Math</code> 物件。</p> +<pre>var a, x, y; +var r = 10; +with (Math) { + a = PI * r * r; + x = r * cos(PI); + y = r * sin(PI/2); +} +</pre> +<p>附註︰雖然使用 <code>with</code> 語句可以使你的程式更加簡潔,但不當使用 <code>with</code> 也會在一定程度上使你的程式速度變慢。參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/with" title="zh tw/Core JavaScript 1.5 參考/語法/with">Core JavaScript 1.5 參考:語法:with</a>。</p> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:continue_語法", "Core_JavaScript_1.5_教學:註解") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/繼承/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/繼承/index.html new file mode 100644 index 0000000000..4b1e65afce --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/繼承/index.html @@ -0,0 +1,146 @@ +--- +title: 繼承 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/繼承 +--- +<p> </p> + +<h3 id="繼承" name="繼承">繼承</h3> + +<p>這裡有很多有關如何在 JavaScript 中定義類型(類別)的困惑之處,包括繼承。這裡有很多方式和一些 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E7%B9%BC%E6%89%BF#%E9%98%BB%E7%A4%99" title="zh tw/Core JavaScript 1.5 教學/繼承#阻礙">次優的選擇</a>。這裡所展示的運作的最好,而且簡單。</p> + +<h2 id="範例" name="範例">範例</h2> + +<p>B 繼承 A︰</p> + +<pre class="brush: js">function A(a) +{ + this.varA = a; +} + +A.prototype = +{ + varA : null, + doSomething : function() + { + ... + } +} + +function B(a, b) +{ + A.call(this, a); + this.varB = b; +} + +B.prototype = +{ + varB : null, + doSomething : function() // 覆寫 + { + A.prototype.doSomething.apply(this, arguments); // 呼叫親類型 + ... + } +} + +extend(B, A); + +var b = new B(); +b.doSomething(); +</pre> + +<p>重點部分是︰</p> + +<ul> + <li>類型是在 .prototype 裡定義的</li> + <li>使用 extend() 來繼承</li> +</ul> + +<p>此處的 extend() 並不是內建的函數,其定義如下︰</p> + +<pre class="eval">function extend(child, supertype) +{ + child.prototype.__proto__ = supertype.prototype; +} +</pre> + +<h2 id="prototype_和___proto__" name="prototype_和___proto__">prototype 和 __proto__</h2> + +<p>JavaScript 對於來自 Java 或 C++ 的開發者而言會感到一些困惑,因為他完全動態,完全執行時期,而且完全沒有類別。他完全只有實體(物件)。甚至〝類別〞也只是函數物件模擬出來的。</p> + +<p>你或許已經注意到前面我們的 <code>function A</code> 很特別,這並不是普通的函數,但可以和關鍵字 <code>new</code> 結合使用來實體化新的物件。他也可以有稱作 <code>prototype</code> 的特別的屬性(由 JS 標準所定義)。這個函數所做的不過是,當你呼叫 <code>new</code> 的時候,參考的 prototype 物件被複製到新的實體的屬性 <code>__proto__</code>。也就是當你這樣做 <code>var a1 = new A()</code> 的時候,JS(在記憶體中建立物件之後,並在使用 <code>this</code> 執行函數 A() 來定義他之前)只是簡單的這樣做 <code>a1.__proto__ = A.prototype</code>。然後當你存取實體的屬性的時候,JS 首先會檢查那些是否直接存在於物件上,如果不是的話,就從 <code>__proto__</code> 搜尋。這意思是所有你定義在 <code>prototype</code> 裡的東西,實際上會被所有的實體所共用,而且你甚至可以在稍後修改 <code>prototype</code> 的部分,並且在所有既存的實體上表現出這個改變,只要你想要的話。</p> + +<p><strong>舉例來說</strong>,當你在上面的範例中這樣做 <code>var a1 = new A(); var a2 = new A();</code>,然後 <code>a1.doSomething</code> 實際上會參考 <code>a1.__proto__.doSomething</code>,這些和你定義的 <code>A.prototype.doSomething</code> 相同,也就是 <code>a1.__proto__.doSomething == a2.__proto__.doSomething == A.prototype.doSomething</code>。</p> + +<p><strong>簡而言之</strong>,<code>prototype</code> 是對類型而言,而 <code>__proto__</code> 對實體而言都相同。</p> + +<p><code>__proto__</code> 是以<em>遞歸</em>的方式來看待的,也就是 <code>a1.doSomething</code>、<code>a1.__proto__.doSomething</code>、<code>a1.__proto__.__proto__.doSomething</code> 等等,直到找到或不存在 <code>__proto__ <span style="font-family: Verdana,Tahoma,sans-serif;">為止。</span></code></p> + +<p>所以,發生了什麼︰當你呼叫<br> + <code> var o = new Foo()</code><br> + JS 實際上只是這樣做<br> + <code> var o = new Object();<br> + o.__proto__ = Foo.prototype;<br> + o.Foo();</code> (諸如此類)<br> + <br> + 以及當你隨後這樣做<br> + <code> o.someProp</code><br> + 他會檢查 <code>o</code> 是否有屬性 <code>someProp</code>,如果沒有就檢查 <code>o.__proto__.someProp</code>,如果沒有就檢查 <code>o.__proto__.__proto__.someProp</code> 依此類推。這個最後的步驟就是 extend() 函數運作的原因。</p> + +<p> </p> + +<p>注意,<code>__proto__</code> 只能在 Mozilla 的 JS 引撉中存取。其他引撉的也有相同的運作,但不能存取 <code>__proto__</code>。參閱以下內容來補救。</p> + +<h2 id="extend()_的另一個選擇" name="extend()_的另一個選擇">extend() 的另一個選擇</h2> + +<p>還有另一個選擇,你也可以定義 extend() 如下︰</p> + +<pre class="eval">function extend(child, supertype) +{ + child.prototype.__proto__ = supertype.prototype; + child.prototype.__super = supertype; +} +</pre> + +<p>因此,當你想要在 <code>B</code> 中呼叫親函數的時候,你可以使用 <code>this.__super</code> 取代 <code>A</code>,例如 <code>this.__super.call(this, a)</code> 用於建構子,以及 <code>this.__super.prototype.doSomething.apply(this, arguments)</code> 用於覆載函數。</p> + +<p>注意,<code>__proto__</code> 在 Mozilla 以外的 JavaScript 版本中可能無法使用。還有另一個選擇,但不是 extend() 的最佳版本,這次應該到處都可以用︰</p> + +<pre class="eval">function extend(child, super) +{ + for (var property in super.prototype) { + if (typeof child.prototype[property] == "undefined") + child.prototype[property] = super.prototype[property]; + } + return child; +} +</pre> + +<p>這次簡單的<em>直接</em>把親類型的 prototype 裡所有的屬性和函數,放入到子類型的 prototype 裡。這對多重繼承而言非常有用,但要小心使用,沒有親類別會把屬性或函數定義成同樣的,或者你需要明確的把那些覆載並定義那些該怎麼做。</p> + +<h2 id="阻礙" name="阻礙">阻礙</h2> + +<p>這裡有另一個方法用來定義類型,例如︰</p> + +<pre class="eval">function A() +{ + this.varA = "bla"; + this.isNotSoGood = function() + { + ... + }; +} +</pre> + +<p>這樣也可以運作,但只是次優的選擇,因為每次你建立這個類型的物件的時候,<code>isNotSoGood</code> 會在<strong>每一個實體</strong>中定義一次。如果是在 .prototype 定義這些的話,就只會定義一次。</p> + +<p><br> + 你可以使用下面的方式來繼承︰</p> + +<pre class="eval">B.prototype = new A(); +</pre> + +<p>不在載入 JS 檔案的時候建立 A() 的實體。這是<strong>非常</strong>壞的點子,因為你可能需要在 A 的建構子裡做一些處理,這可能會耗費時間並因此大幅延遲載入,或嘗試存取尚未載入的東西(例如,在 utils.js 裡的函數)。</p> + +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的物件:String_物件", "Core_JavaScript_1.5_教學:以類別為基礎的語言_vs._以原型為基礎的語言") }}</p> + +<p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Inheritance" } ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/index.html new file mode 100644 index 0000000000..a9a7200773 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/index.html @@ -0,0 +1,31 @@ +--- +title: 職員的例子 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子 +--- +<h3 id="職員的例子" name="職員的例子">職員的例子</h3> +<p>本章的剩餘部分會使用如下所示的職員的階層圖。</p> +<p><img alt="Image:hier01.gif" class="internal" src="/@api/deki/files/708/=Hier01.gif"></p> +<p><small><strong>圖 8.1: 簡單的物件的階層</strong></small></p> +<p>本範例使用了下面的物件︰</p> +<ul> + <li>Employee 具有 name(其值預設為空字串)以及 dept(其值預設為 "general")屬性。</li> + <li>Manager 以 Employee 為基礎。他加入了 reports 屬性(其值預設為空的陣列,打算使用內含 Employee 物件的陣列作為他的值)。</li> + <li>WorkerBee 也是 Employee 為基礎。他加入了 projects 屬性(其值預設為空的陣列,打算使用字串的陣列作為他的值)。</li> + <li>SalesPerson 以 WorkerBee 為基礎。他加入了 quota 屬性(其值預設為 100)。他也使用 "sales" 值覆寫了 dept 屬性,指明所有的銷售員都從屬於同一部門。</li> + <li>Engineer 以 WorkerBee 為基礎。他加入了 machine 屬性(其值預設為空字串),而且也使用 "engineering" 值覆寫了 dept 屬性。</li> +</ul> +<p>其餘的範例︰</p> +<ul> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E8%81%B7%E5%93%A1%E7%9A%84%E4%BE%8B%E5%AD%90/%E9%9A%8E%E5%B1%A4%E7%9A%84%E5%BB%BA%E7%AB%8B" title="zh tw/Core JavaScript 1.5 教學/職員的例子/階層的建立">階層的建立</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E8%81%B7%E5%93%A1%E7%9A%84%E4%BE%8B%E5%AD%90/%E7%89%A9%E4%BB%B6%E7%9A%84%E5%B1%AC%E6%80%A7" title="zh tw/Core JavaScript 1.5 教學/職員的例子/物件的屬性">物件的屬性</a> + <ul> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E8%81%B7%E5%93%A1%E7%9A%84%E4%BE%8B%E5%AD%90/%E7%89%A9%E4%BB%B6%E7%9A%84%E5%B1%AC%E6%80%A7/%E5%B1%AC%E6%80%A7%E7%9A%84%E7%B9%BC%E6%89%BF" title="zh tw/Core JavaScript 1.5 教學/職員的例子/物件的屬性/屬性的繼承">屬性的繼承</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E8%81%B7%E5%93%A1%E7%9A%84%E4%BE%8B%E5%AD%90/%E7%89%A9%E4%BB%B6%E7%9A%84%E5%B1%AC%E6%80%A7/%E5%B1%AC%E6%80%A7%E7%9A%84%E5%8A%A0%E5%85%A5" title="zh tw/Core JavaScript 1.5 教學/職員的例子/物件的屬性/屬性的加入">屬性的加入</a></li> + </ul> + </li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E8%81%B7%E5%93%A1%E7%9A%84%E4%BE%8B%E5%AD%90/%E6%9B%B4%E9%9D%88%E6%B4%BB%E7%9A%84%E5%BB%BA%E6%A7%8B%E5%AD%90" title="zh tw/Core JavaScript 1.5 教學/職員的例子/更靈活的建構子">更靈活的建構子</a></li> +</ul> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:以類別為基礎的語言_vs._以原型為基礎的語言", "Core_JavaScript_1.5_教學:職員的例子:階層的建立") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/物件的屬性/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/物件的屬性/index.html new file mode 100644 index 0000000000..01d23df274 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/物件的屬性/index.html @@ -0,0 +1,14 @@ +--- +title: 物件的屬性 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子/物件的屬性 +--- +<h3 id="物件的屬性" name="物件的屬性">物件的屬性</h3> +<p>本節討論物件如何從原型鏈上的其他物件來繼承屬性,以及當你在執行時期加入屬性的時候,發生了什麼事。</p> +<ul> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E8%81%B7%E5%93%A1%E7%9A%84%E4%BE%8B%E5%AD%90/%E7%89%A9%E4%BB%B6%E7%9A%84%E5%B1%AC%E6%80%A7/%E5%B1%AC%E6%80%A7%E7%9A%84%E7%B9%BC%E6%89%BF" title="zh tw/Core JavaScript 1.5 教學/職員的例子/物件的屬性/屬性的繼承">屬性的繼承</a></li> + <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E8%81%B7%E5%93%A1%E7%9A%84%E4%BE%8B%E5%AD%90/%E7%89%A9%E4%BB%B6%E7%9A%84%E5%B1%AC%E6%80%A7/%E5%B1%AC%E6%80%A7%E7%9A%84%E5%8A%A0%E5%85%A5" title="zh tw/Core JavaScript 1.5 教學/職員的例子/物件的屬性/屬性的加入">屬性的加入</a></li> +</ul> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:職員的例子:階層的建立", "Core_JavaScript_1.5_教學:職員的例子:物件的屬性:屬性的繼承") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/物件的屬性/屬性的加入/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/物件的屬性/屬性的加入/index.html new file mode 100644 index 0000000000..4d5a456ad4 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/物件的屬性/屬性的加入/index.html @@ -0,0 +1,19 @@ +--- +title: 屬性的加入 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子/物件的屬性/屬性的加入 +--- +<h3 id="屬性的加入" name="屬性的加入">屬性的加入</h3> +<p>在 JavaScript 中,你可以在執行時期把屬性加入到任何的物件。你不會受到只能使用由建構子函數提供屬性的限制。若要為特定的單一物件加入屬性,你可以把值代入給物件,如下︰</p> +<pre>mark.bonus = 3000; +</pre> +<p>現在,<code>mark</code> 物件有了額外的屬性,而其他的 <code>WorkerBee</code> 不會有這個屬性。</p> +<p>如果你把新的屬性加入到已經被用作建構子函數的原型物件裡的話,就會把新的屬性加入到從原型繼承屬性的所有物件裡。例如,你可以使用如下語句把 <code>specialty</code> 屬性加入到所有的職員︰</p> +<pre>Employee.prototype.specialty = "none"; +</pre> +<p>JavaScript 一執行這個語句,<code>mark</code> 物件也就會有這個值為 "<code>none</code>" 的 specialty 屬性。下面的圖解顯示出加入這個屬性給 Employee 原型的效果,以及從 <code>Engineer</code> 原型覆蓋這個屬性。</p> +<p><img alt="Image:hier04.gif" class="internal" src="/@api/deki/files/711/=Hier04.gif"><br> + <small><strong>圖 8.4: 加入屬性</strong></small></p> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:職員的例子:物件的屬性:屬性的繼承", "Core_JavaScript_1.5_教學:職員的例子:更靈活的建構子") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/物件的屬性/屬性的繼承/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/物件的屬性/屬性的繼承/index.html new file mode 100644 index 0000000000..fa38245533 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/物件的屬性/屬性的繼承/index.html @@ -0,0 +1,24 @@ +--- +title: 屬性的繼承 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子/物件的屬性/屬性的繼承 +--- +<h3 id="屬性的繼承" name="屬性的繼承">屬性的繼承</h3> +<p>假定你以如下語句建立了作為 <code>WorkerBee</code> 的 <code>mark</code> 物件(如同 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E8%81%B7%E5%93%A1%E7%9A%84%E4%BE%8B%E5%AD%90/%E9%9A%8E%E5%B1%A4%E7%9A%84%E5%BB%BA%E7%AB%8B" title="zh tw/Core JavaScript 1.5 教學/職員的例子/階層的建立">圖 8.3</a> 所示)︰</p> +<pre class="eval">mark = new WorkerBee; +</pre> +<p>當 JavaScript 看見 new 運算子的時候,他就會建立新的通用物件,並且把這個新物件當作 <code>this</code> 關鍵字的值傳給 WorkerBee 的建構子函數。建構子函數會明確的設定 <code>projects</code> 屬性的值,並且隱含的把 <code>__proto__</code> 屬性內部的值設定成 <code>WorkerBee.prototype</code> 的值。(這個屬性的名稱前後各有兩個底線字元。)<code>__proto__</code> 屬性決定了用來返回屬性值的原型鏈。這些屬性一經設定,JavaScript 返回新的物件,且代入語句會把變數 <code>mark</code> 設定給這個物件。</p> +<p>這個過程並不會把 <code>mark</code> 從原型鏈上繼承下來的屬性明確的放置在 <code>mark</code> 物件裡的值(<em>局域</em>值)。當你需要某個屬性值的時候,JavaScript 首先檢查這個值是否存在於物件裡。如果存在,就直接返回這個值。如果這些變數不在局域區塊裡,JavaScript 就會檢查原型鏈(使用 <code>__proto__</code> 屬性)。如果在原型鏈上的物件有這個屬性的值,就會返回這個值。如果找不到這些屬性,JavaScript 會說這個物件並沒有這個屬性。以這種方式,<code>mark</code> 物件就有了如下屬性和值︰</p> +<pre class="eval">mark.name = ""; +mark.dept = "general"; +mark.projects = []; +</pre> +<p><code>mark</code> 物件從 <code>mark.__proto__</code> 裡的原型物件繼承了 name 和 dept 屬性的值。他還藉由 WorkerBee 的建構子給 projects 屬性代入局域值。JavaScript 就這樣達成了屬性和值的繼承。這個過程的部分細節會在 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E5%86%8D%E8%AB%87%E5%B1%AC%E6%80%A7%E7%9A%84%E7%B9%BC%E6%89%BF" title="zh tw/Core JavaScript 1.5 教學/再談屬性的繼承">再談屬性的繼承</a> 裡討論。</p> +<p>因為這些建構子並不能讓你傳入特定實體的值,這些資訊是通用的。這些屬性值預設會被所有從 WorkerBee 建立的新物件所共享。當然你也可以修改任何屬性的值。因此,你可以給 <code>mark</code> 特定的資訊如下︰</p> +<pre class="eval">mark.name = "Doe, Mark"; +mark.dept = "admin"; +mark.projects = ["navigator"]; +</pre> +<div class="noinclude"> + <p>{{ PreviousNext("Core JavaScript 1.5 教學:職員的例子:物件的屬性", "Core JavaScript 1.5 教學:職員的例子:物件的屬性:屬性的加入") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/階層的建立/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/階層的建立/index.html new file mode 100644 index 0000000000..3e7a144656 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/職員的例子/階層的建立/index.html @@ -0,0 +1,135 @@ +--- +title: 階層的建立 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子/階層的建立 +--- +<h3 id="階層的建立" name="階層的建立">階層的建立</h3> +<p>這裡有一些方式可以定義適當的建構子函數,以實現 Employee 的階層結構。該如何選擇定義這些的方式,主要取決於你希望你的應用程式能做什麼。</p> +<p>本節展示如何使用非常簡單的(相對來說也比較沒有彈性)定義,以示範繼承是如何運作的。在這些定義中,當你建立物件的時候,你不能指定任何的屬性值。這些新建立的物件會簡單的取得預設值,稍後你就可以修改這些值。圖 8.2 以這些簡單的定義解說了階層結構。</p> +<p>在實際的應用程式中,你可能會定義允許你在建立物件的時候提供屬性值的建構子(參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E8%81%B7%E5%93%A1%E7%9A%84%E4%BE%8B%E5%AD%90/%E6%9B%B4%E9%9D%88%E6%B4%BB%E7%9A%84%E5%BB%BA%E6%A7%8B%E5%AD%90" title="zh tw/Core JavaScript 1.5 教學/職員的例子/更靈活的建構子">更靈活的建構子</a> 以取得資訊)。現在,這些簡單的定義示範繼承是如何發生的。</p> +<p><img alt="Image:hier02.gif" class="internal" src="/@api/deki/files/709/=Hier02.gif"><br> + <small><strong>圖 8.2: Employee 物件的定義</strong></small></p> +<p>下面 Java 和 JavaScript 的 <code>Employee</code> 定義很類似。唯一的不同點是,在 Java 中,你需要為每一個屬性指定類型,但 JavaScript 不需要。而且你需要為 Java 類別建立明確的建構子方法。</p> +<table class="fullwidth-table"> + <tbody> + <tr> + <th>JavaScript</th> + <th>Java</th> + </tr> + <tr> + <td> + <pre> +function Employee () { +this.name = ""; +this.dept = "general"; +} +</pre> + </td> + <td> + <pre> +public class Employee { + public String name; + public String dept; + public Employee () { + this.name = ""; + this.dept = "general"; + } +} +</pre> + </td> + </tr> + </tbody> +</table> +<p><code>Manager</code> 和 <code>WorkerBee</code> 的定義顯現出在如何指定高於繼承鏈的下一個物件時的不同點。在 JavaScript 中,你把原型實體作為建構子函數的 <code>prototype</code> 屬性的值加了上去。在你定義了建構子以後的任何時間點上,你都可以這麼做。在 Java 中,你只能在類別定義的內部指定親類別。你不能在類別定義的外部改變親類別。</p> +<table class="fullwidth-table"> + <tbody> + <tr> + <th>JavaScript</th> + <th>Java</th> + </tr> + <tr> + <td> + <pre> +function Manager () { +this.reports = []; +} +Manager.prototype = new Employee; + +function WorkerBee () { +this.projects = []; +} +WorkerBee.prototype = new Employee; +</pre> + </td> + <td> + <pre> +public class Manager extends Employee { + public Employee[] reports; + public Manager () { + this.reports = new Employee[0]; + } +} + +public class WorkerBee extends Employee { + public String[] projects; + public WorkerBee () { + this.projects = new String[0]; + } +} +</pre> + </td> + </tr> + </tbody> +</table> +<p><code>Engineer</code> 和 <code>SalesPerson</code> 的定義所建立的物件是傳承自 <code>WorkerBee</code> 以及 <code>Employee</code>。這些類型的物件具有在鏈上比他高層的所有物件的屬性。此外,定義中還使用指定給這些物件的新值來覆蓋被繼承的 <code>dept</code> 屬性的值。</p> +<table class="fullwidth-table"> + <tbody> + <tr> + <th>JavaScript</th> + <th>Java</th> + </tr> + <tr> + <td> + <pre> +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee; + +function Engineer () { + this.dept = "engineering"; + this.machine = ""; +} +Engineer.prototype = new WorkerBee; +</pre> + </td> + <td> + <pre> +public class SalesPerson extends WorkerBee { + public double quota; + public SalesPerson () { + this.dept = "sales"; + this.quota = 100.0; + } +} + +public class Engineer extends WorkerBee { + public String machine; + public Engineer () { + this.dept = "engineering"; + this.machine = ""; + } +} +</pre> + </td> + </tr> + </tbody> +</table> +<p>使用這些定義,你可以建立這些物件的實體,同時實體也為他們的屬性取得預設值。圖 8.3 解說使用這些 JavaScript 定義來建立新的物件,並顯示新物件的屬性值。</p> +<p><strong>附註:</strong> 術語<em>實體(instance)</em>在以類別為基礎的語言中有特定的技術含義。在這些語言中,實體就是類別的獨立成員,而且在根本上就有別於類別。在 JavaScript 中,〝實體〞並沒有這些技術含義,因為 JavaScript 並沒有類別和實體的分別。然而,在談到 JavaScript 的時候,〝實體〞也可以在通俗上用來指,使用實際的建構子函數建立的物件。因此,在這些範例中,你也可以通俗的說 <code>jane</code> 是 <code>Engineer</code> 的實體。類似的,儘管術語 <em>親(parent)、子(child)、祖先(ancestor)</em>、<em>子孫(descendant)</em>在 JavaScript 中並沒有正式的含義;你也可以隨俗的使用這些術語,來談論在原型鏈中較高或較低的某個物件。</p> +<p><img alt="Image:hier03.gif" class="internal" src="/@api/deki/files/710/=Hier03.gif"><br> + <span style="font-weight: bold;">圖</span><small><strong> 8.3: 使用簡單的定義來建立物件</strong></small></p> +<div class="noinclude"> + <p>{{ PreviousNext("Core_JavaScript_1.5_教學:職員的例子", "Core_JavaScript_1.5_教學:職員的例子:物件的屬性") }}</p> +</div> +<p> </p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/迭代器和產生器/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/迭代器和產生器/index.html new file mode 100644 index 0000000000..21029266db --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/迭代器和產生器/index.html @@ -0,0 +1,293 @@ +--- +title: 迭代器和產生器 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/迭代器和產生器 +--- +<h3 id="迭代器和產生器" name="迭代器和產生器">迭代器和產生器</h3> + +<p>處理集合中的每一項是很常見的操作。JavaScript 提供了許多迭代整個集合的方式,從簡單的 <code><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for" title="zh tw/Core JavaScript 1.5 參考/語法/for">for</a></code> 和 <code><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for_each...in" title="zh tw/Core JavaScript 1.5 參考/語法/for each...in">for each</a></code> 循環到 <code><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E5%85%A8%E5%9F%9F%E7%89%A9%E4%BB%B6/Array/map" title="zh tw/Core JavaScript 1.5 參考/全域物件/Array/map">map</a>()</code>、<code><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E5%85%A8%E5%9F%9F%E7%89%A9%E4%BB%B6/Array/filter" title="zh tw/Core JavaScript 1.5 參考/全域物件/Array/filter">filter</a>()</code> 以及 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E9%99%A3%E5%88%97%E7%9A%84%E9%81%8B%E7%94%A8#%E9%99%A3%E5%88%97%E7%9A%84%E7%B0%A1%E7%B4%84%E5%BC%8F" title="zh tw/Core JavaScript 1.5 教學/陣列的運用#陣列的簡約式">陣列的簡約式</a>。迭代器和產生器是在 JavaScript 1.7 引入的,帶來在核心語言中直接迭代的觀念,並提供自訂 <code><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for...in" title="zh tw/Core JavaScript 1.5 參考/語法/for...in">for...in</a></code> 和 <code><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for_each...in" title="zh tw/Core JavaScript 1.5 參考/語法/for each...in">for each</a></code> 循環的行為的機制。</p> + +<div class="note"><strong>附注:</strong> <code>yield</code> 關鍵字只能在 HTML 裡包有 <code><script type="application/javascript;version=1.7"></code> 區塊(或更高的版本)的代碼區塊中使用。 <a class="internal" href="/zh_tw/XUL" title="zh tw/XUL">XUL</a> Script 標記可以存取這些功能,無須這個特別的區塊。</div> + +<h4 id="迭代器" name="迭代器">迭代器</h4> + +<p>迭代器(Iterator)是一種知道如何從集合裡每次以同樣的方式存取項目的物件。並保持對自己序列內部的目前位置的追蹤。在 JavaScript 中,迭代器是一種提供有能夠返回序列中的下一項的 <code>next()</code> 方法的物件。這個方法可以在序列用盡時,選擇性的出現 <code>StopIteration</code> 例外。</p> + +<p>迭代器物件一經建立以後,可以明確的反覆呼叫 <code>next()</code> 來使用,或隱含的使用 JavaScript 的 <code><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for...in" title="zh tw/Core JavaScript 1.5 參考/語法/for...in">for...in</a></code> 和 <code><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for_each...in" title="zh tw/Core JavaScript 1.5 參考/語法/for each...in">for each</a></code> 結構。</p> + +<p>可以使用 <code>Iterator()</code> 函數來為物件和陣列建立簡單的迭代器︰</p> + +<pre class="eval">var lang = { name: 'JavaScript', birthYear: 1995 }; +var it = Iterator(lang); +</pre> + +<p>一經初始化以後,就可以呼叫 <code>next()</code> 方法依序從物件中存取鍵值對(key-value pair)︰</p> + +<pre class="eval">var pair = it.next(); // 鍵值對是 ["name", "JavaScript"] +pair = it.next(); // 鍵值對是 ["birthYear", 1995] +pair = it.next(); // 拋出 StopIteration 例外 +</pre> + +<p>可以使用 <code><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83/%E8%AA%9E%E6%B3%95/for...in" title="zh tw/Core JavaScript 1.5 參考/語法/for...in">for...in</a></code> 循環來取代直接呼叫 <code>next()</code> 方法。循環會在 <code>StopIteration</code> 例外出現的時候自動終止。</p> + +<pre class="eval">var it = Iterator(lang); +for (var pair in it) + print(pair); // 依序輸出每一個 [key, value] 對 +</pre> + +<p>如果我們只想要迭代物件的鍵(key),我們可以把第二個參數 <code>true</code> 傳給 <code>Iterator()</code> 函數︰</p> + +<pre class="eval">var it = Iterator(lang, true); +for (var key in it) + print(key); // 依序輸出每一個鍵 +</pre> + +<p>使用 <code>Iterator()</code> 存取物件內容的其中一個好處是已經加入到 <code>Object.prototype</code> 的自訂屬性不會被包含在序列裡。</p> + +<p><code>Iterator()</code> 也可以和陣列一起使用︰</p> + +<pre class="eval">var langs = ['JavaScript', 'Python', 'C++']; +var it = Iterator(langs); +for (var pair in it) + print(pair); // 依序輸出每一個 [index, language] 對 +</pre> + +<p>如同物件一般,傳入 <code>true</code> 作為第二個參數,將導致迭代出存在於陣列裡的索引︰</p> + +<pre class="eval">var langs = ['JavaScript', 'Python', 'C++']; +var it = Iterator(langs, true); +for (var i in it) + print(i); // 輸出 0,然後是 1,然後是 2 +</pre> + +<p>他也可以把 for 循環內部使用的 <code>let</code> 關鍵字的索引和值兩者,代入給區塊作用域的變數,並分割代入︰</p> + +<pre class="eval">var langs = ['JavaScript', 'Python', 'C++']; +var it = Iterator(langs); +for (let [i, lang] in it) + print(i + ': ' + lang); // 輸出 "0: JavaScript" 等等。 +</pre> + +<h4 id="自訂的迭代器的定義" name="自訂的迭代器的定義">自訂的迭代器的定義</h4> + +<p>有一些物件所表示的集合項,應該以特定的方式來迭代。</p> + +<ul> + <li>迭代物件的某一範圍,應該一個接著一個返回範圍內的數字。</li> + <li>可以使用深度優先或廣度優先的遍歷法來遊覽樹裡的葉項。</li> + <li>表示來自資料庫的查詢結果的物件的迭代,應該一行接著一行返回,即使整份結果尚未完全載入到單一的陣列。</li> + <li>無限長的數學序列(如費伯納契數列)的迭代,應該要能夠一個接著一個返回,而無須建立無限長的資料結構。</li> +</ul> + +<p>JavaScript 可讓你編寫表示自訂迭代器邏輯的代碼,並把他連結到物件上。</p> + +<p>我們將會建立簡單的 <code>Range</code> 物件,這個物件存放了 low 和 high 值。</p> + +<pre class="eval">function Range(low, high) +{ + this.low = low; + this.high = high; +} +</pre> + +<p>現在我們將會建立自訂的迭代器,使其返回包含在某一範圍內的整數序列。迭代器的界面必須要有由我們提供的 <code>next()</code> 方法,這個方法會返回來自序列的某一項,或拋出 <code>StopIteration</code> 例外。</p> + +<pre class="eval">function RangeIterator(range) +{ + this.range = range; + this.current = this.range.low; +} +RangeIterator.prototype.next = function() +{ + if (this.current > this.range.high) + throw StopIteration; + var current = this.current; + this.current += 1; + return current; +}; +</pre> + +<p>我們的 <code>RangeIterator</code> 就是有範圍限制的實體的實際例子,並維護他自己的 <code>current</code> 屬性用以追蹤他沿著序列已走了多遠。</p> + +<p>最後,把我們的 <code>RangeIterator</code> 和 <code>Range</code> 物件連繫在一起,我們需要加入特別的 <code>__iterator__</code> 方法給 <code>Range</code>。這個方法會在當我們試圖迭代 <code>Range</code> 實體的時候呼叫,而且應該會返回 <code>RangeIterator</code> 的實體,這個實體實裝了迭代器的邏輯。</p> + +<pre class="eval">Range.prototype.__iterator__ = function() +{ + return new RangeIterator(this); +}; +</pre> + +<p>掛在我們自訂的迭代器以後,我們可以迭代實體的某一範圍內,如下︰</p> + +<pre class="eval">var range = new Range(3, 5); +for (var i in range) + print(i); // 輸出序列中的 3,然後是 4,然後是 5 +</pre> + +<h4 id="產生器︰建構迭代器的較佳方式" name="產生器︰建構迭代器的較佳方式">產生器︰建構迭代器的較佳方式</h4> + +<p>儘管自訂的迭代器是很好用的工具,但在建立時的程式設計必須要很謹慎,因為需要明確的維護他們的內部狀態。產生器(Generator)提供另一種更強大的選擇︰可讓你編寫能夠維護自身狀態的單一函數來定義迭代器的演算法。</p> + +<p>產生器是一種特殊類型的函數,他的運作方式類似迭代器的生產廠房。只要函數內含有一個以上的 <code>yield</code> 語句,就會變成產生器。</p> + +<p>當產生器函數被呼叫的時候,並不會立即執行函數的本體;取而代之的是,他會返回產生器迭代器(generator-iterator)物件。每次呼叫產生器迭代器的 <code>next()</code> 方法,就會執行函數本體直到下一個 <code>yield</code> 語句,並返回他的結果。如果執行到函數的末端或到達 <code>return</code> 語句,就會拋出 <code>StopIteration</code> 例外。</p> + +<p>配合例子是最佳的說明︰</p> + +<pre class="eval">function simpleGenerator() +{ + yield "first"; + yield "second"; + yield "third"; + for (var i = 0; i < 3; i++) + yield i; +} + +var g = simpleGenerator(); +print(g.next()); // 輸出 "first" +print(g.next()); // 輸出 "second" +print(g.next()); // 輸出 "third" +print(g.next()); // 輸出 0 +print(g.next()); // 輸出 1 +print(g.next()); // 輸出 2 +print(g.next()); // 拋出 StopIteration +</pre> + +<p>產生器函數可以像類別的 <code>__iterator__</code> 方法一般直接的使用,大幅減少建立自訂的迭代器的代碼量。這裡是我們的 <code>Range</code>,使用產生器重新編寫︰</p> + +<pre class="eval">function Range(low, high) +{ + this.low = low; + this.high = high; +} +Range.prototype.__iterator__ = function() +{ + for (var i = this.low; i <= this.high; i++) + yield i; +}; +var range = new Range(3, 5); +for (var i in range) + print(i); // 輸出序列中的 3,然後是 4,然後是 5 +</pre> + +<p>並不是所有的產生器都會終止;有可能建立出表示無限序列的產生器。下面的產生器實裝了費伯納契數列,每一個元素都是前面兩個元素的合︰</p> + +<pre class="eval">function fibonacci() +{ + var fn1 = 1; + var fn2 = 1; + while (1) + { + var current = fn2; + fn2 = fn1; + fn1 = fn1 + current; + yield current; + } +} + +var sequence = fibonacci(); +print(sequence.next()); // 1 +print(sequence.next()); // 1 +print(sequence.next()); // 2 +print(sequence.next()); // 3 +print(sequence.next()); // 5 +print(sequence.next()); // 8 +print(sequence.next()); // 13 +</pre> + +<p>產生器函數可以接受參數,這個參數是用來約束第一次被呼叫的函數。產生器可以使用 <code>return</code> 語句來終止(並導致 <code>StopIteration</code> 例外的出現)。下面的 <code>fibonacci()</code> 變體接受選用性的 limit 參數,一旦通過限制就會終止。</p> + +<pre class="eval">function fibonacci(limit) +{ + var fn1 = 1; + var fn2 = 1; + while (1) + { + var current = fn2; + fn2 = fn1; + fn1 = fn1 + current; + <strong>if (limit && current > limit)</strong> + <strong>return;</strong> + yield current; + } +} +</pre> + +<h4 id="高階的產生器" name="高階的產生器">高階的產生器</h4> + +<p>產生器會計算出要求他們產生的值,這可讓產生器更有效率的表示需要耗費大量計算的序列,甚至是上面示範的無窮數列。</p> + +<p>除了 <code>next()</code> 方法以外,產生器迭代器物件還有 <code>send()</code> 方法,可以用來修改產生器的內部狀態。傳遞給 <code>send()</code> 的值將會被視為中止產生器的最後一個 <code>yield</code> 語句的結果。在你可以使用 <code>send()</code> 來傳送指定的值之前,你必須至少呼叫一次 <code>next()</code> 來啟動產生器。</p> + +<p>這裡是使用 <code>send()</code> 來重新開始數列的費伯納契數產生器︰</p> + +<pre>function fibonacci() +{ + var fn1 = 1; + var fn2 = 1; + while (1) + { + var current = fn2; + fn2 = fn1; + fn1 = fn1 + current; + <strong>var reset = yield current; + if (reset){ + fn1 = 1; + fn2 = 1; + }</strong> + } +} + +var sequence = fibonacci(); +print(sequence.next()); // 1 +print(sequence.next()); // 1 +print(sequence.next()); // 2 +print(sequence.next()); // 3 +print(sequence.next()); // 5 +print(sequence.next()); // 8 +print(sequence.next()); // 13 +<strong>print(sequence.send(true)); // 1</strong> +print(sequence.next()); // 1 +print(sequence.next()); // 2 +print(sequence.next()); // 3</pre> + +<div class="note"><strong>附注:</strong> 作為有趣的一點,呼叫 <code>send(undefined)</code> 就相當於呼叫 <code>next()</code>。然而,使用除了 undefined 以外的任意值啟動新生的產生器,在呼叫 <code>send()</code> 的時候,將會引起 <code>TypeError</code> 例外。</div> + +<p>你可以藉由呼叫產生器的 <code>throw()</code> 方法,並傳入他應該拋出的例外值,強迫產生器拋出例外。例外將會從目前被中止的產生器的位置拋出例外,就如同目前被中止的 <code>yield</code> 被替換成 <code>throw <em>value</em></code> 語句一樣。</p> + +<p>如果在拋出例外的處理期間沒有遇到 yield,然後例外將會不斷傳播直到呼叫 <code>throw()</code>,且隨後呼叫 <code>next()</code> 將導致 <code>StopIteration</code> 被拋出。</p> + +<p>產生器有可以強迫關閉他自己的 <code>close()</code> 方法。關閉產生器的效果是︰</p> + +<ol> + <li>執行所有在產生器函數裡的 <code>finally</code> 子句。</li> + <li>如果 <code>finally</code> 子句拋出除了 <code>StopIteration</code> 以外的任何例外,例外會被傳播到 <code>close()</code> 方法的呼叫者。</li> + <li>產生器終止。</li> +</ol> + +<h4 id="產生器的表達式" name="產生器的表達式">產生器的表達式</h4> + +<p>陣列簡約式主要的缺點是他們會造成在記憶體中建構出完整的新陣列。如果輸入的簡約式本身是小型的陣列其開銷還不明顯 - 但如果輸入的是大型的陣列或耗費資源(甚至是無限大)的產生器,新陣列的建立就會產生問題。</p> + +<p>產生器能夠延後計算他們要求的所需計算的項的序列。<em>產生器表達式</em>在語法上幾乎等同於 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E9%99%A3%E5%88%97%E7%9A%84%E9%81%8B%E7%94%A8#%E9%99%A3%E5%88%97%E7%9A%84%E7%B0%A1%E7%B4%84%E5%BC%8F" title="zh tw/Core JavaScript 1.5 教學/陣列的運用#陣列的簡約式">陣列的簡約式</a> - 他們使用圓括弧取代方括號 - 但不是建構陣列,他們建立可以延後執行的產生器。你可以把他們想成建立產生器的簡寫語法。</p> + +<p>假設我們有一個迭代器 <code>it</code> 可以迭代出大型的整數序列。我們想要建立可以迭代出雙倍的新迭代器。陣列簡約式會在記憶體中建立含有雙倍值的完整的陣列︰</p> + +<pre class="eval">var doubles = [i * 2 for (i in it)]; +</pre> + +<p>產生器表達式一方面會建立新的迭代器,能夠建立他們所需的雙倍值︰</p> + +<pre class="eval">var it2 = (i * 2 for (i in it)); +print(it2.next()); // 來自 it 的第一個值,雙倍 +print(it2.next()); // 來自 it 的第二個值,雙倍</pre> + +<p>如果把產生器表達式當作參數傳給函數,函數呼叫所使用的圓括弧意味著可以省略外部的圓括弧︰</p> + +<pre class="eval">var result = doSomething(i * 2 for (i in it)); +</pre> + +<p> </p> + +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:陣列的運用", "Core_JavaScript_1.5_教學:物件模型的細節") }}</p> + +<p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Iterators_and_Generators" } ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/運算子/比較運算子/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/運算子/比較運算子/index.html new file mode 100644 index 0000000000..2ce01c1501 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/運算子/比較運算子/index.html @@ -0,0 +1,14 @@ +--- +title: 比較運算子 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/運算子/比較運算子 +--- +<p> </p> +<h3 id="比較運算子" name="比較運算子">比較運算子</h3> +<p><span class="comment">This seems to me kind of poorly explained, mostly the diference betwen "==" and "==="...</span>比較運算子比較他的運算元,並根據比較是否為真的結果返回邏輯值。運算元可以是數值、字串、邏輯或物件的值。字串是以 Unicode 的值作為標準的字典順序來比較。在大多數情況下,如果兩個運算元不是同樣的類型,JavaScript 會為了比較而嘗試把運算元轉換為適當的類型。(本規則的唯一例外是 <code>===</code> 和 <code>!==</code>,他會進行“嚴格的”相等性和不相等性的檢查,且在檢查等相性之前,並不會把運算元轉換為相容的類型。)通常以數值進行比較。下表以範例代碼解明比較運算子︰</p> +<pre class="eval">var var1 = 3, var2 = 4; +</pre> +<table class="fullwidth-table"> <tbody> <tr> <th>運算子</th> <th>說明</th> <th>返回 true 的範例</th> </tr> <tr> <td>等於 (==)</td> <td>運算元相等時,返回 true。</td> <td><code>3 == var1</code><br> <p><code>"3" == var1</code></p> <code>3 == '3'</code></td> </tr> <tr> <td>不等於 (!=)</td> <td>運算元不相等時,返回 true。</td> <td><code>var1 != 4<br> var2 != "3"</code></td> </tr> <tr> <td>嚴格的等於 (===)</td> <td>運算元相等且類型相同時,返回 true。</td> <td><code>3 === var1</code></td> </tr> <tr> <td>嚴格的不等於 (!==)</td> <td>運算元不相等或類型不相同時,返回 true。</td> <td><code>var1 !== "3"<br> 3 !== '3'</code></td> </tr> <tr> <td>大於 (>)</td> <td>左邊的運算元大於右邊的運算元時,返回 true。</td> <td><code>var2 > var1<br> "12" > 2</code></td> </tr> <tr> <td>大於或等於 (>=)</td> <td>左邊的運算元大於或等於右邊的運算元時,返回 true。</td> <td><code>var2 >= var1<br> var1 >= 3</code></td> </tr> <tr> <td>小於 (<)</td> <td>左邊的運算元小於右邊的運算元時,返回 true。</td> <td><code>var1 < var2<br> "12" < "2"</code></td> </tr> <tr> <td>小於或等於 (<=)</td> <td>左邊的運算元小於或等於右邊的運算元時,返回 true。</td> <td><code>var1 <= var2<br> var2 <= 5</code></td> </tr> </tbody> +</table> +<p><small><strong>表 3.3: 比較運算子</strong></small></p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:Operators:代入運算子", "Core_JavaScript_1.5_教學:運算子:算術運算子") }}</p> +<p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Operators/Comparison_Operators", "es": "es/Gu\u00eda_JavaScript_1.5/Operadores/Operadores_de_comparaci\u00f3n", "fr": "fr/Guide_JavaScript_1.5/Op\u00e9rateurs/Op\u00e9rateurs_de_comparaison", "ja": "ja/Core_JavaScript_1.5_Guide/Operators/Comparison_Operators", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Operatory/Operatory_por\u00f3wnania" } ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/閉包的運用/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/閉包的運用/index.html new file mode 100644 index 0000000000..0e0905730f --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/閉包的運用/index.html @@ -0,0 +1,227 @@ +--- +title: 閉包的運用 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/閉包的運用 +--- +<h3 id="閉包的運用" name="閉包的運用">閉包的運用</h3> +<p>閉包(Closure)經常會被認為是 JavaScript 的高級機能,但了解閉包是精通語言的必要之事。</p> +<p>思考以下的函數︰</p> +<pre class="brush: js">function init() { + var name = "Mozilla"; + function displayName() { + alert(name); + } + displayName(); +} +</pre> +<p><code>init()</code> 函數建立了稱為 <code>name</code> 的局域變數,然後定義了稱為 <code>displayName()</code> 的函數。<code>displayName()</code> 是內部的函數 - 他是在 <code>init()</code> 內部定義的,而且只在函數本體內部才可使用。<code>displayName()</code> 沒有他自己的局域變數,但會重複使用在外部函數裡所宣告的 name 變數。</p> +<p>本例只會做一點事 - 試試執行代碼看會發生什麼。這是<em>詞彙作用域</em>的範例︰在 JavaScript 中,變數的作用域是由他自己在原始碼中的位置所定義的,且內部的函數能夠存取宣告於外部作用域的變數。</p> +<p>現在思考下例︰</p> +<pre class="brush: js">function makeFunc() { + var name = "Mozilla"; + function displayName() { + alert(name); + } + return displayName; +} + +var myFunc = makeFunc(); +myFunc(); +</pre> +<p>如果你執行這個代碼,將會發生和前一個 <code>init()</code> 例子完全相同的效果︰字串 "Mozilla" 將會被顯示在 JavaScript 的警告方框中。其中的不同點 - 以及有趣的一點 - 是內部的 <code>displayName()</code> 函數會在執行之前從外部的函數所返回。</p> +<p>代碼的運作看起來也許很不直覺。通常說,在函數內部的局域變數只存在於函數執行的期間。一旦 <code>makeFunc()</code> 執行完畢,預期不再需要 name 變數是很合理的。由於代碼仍舊以預期般的運作,很明顯情況並不如此。</p> +<p>對於這個難題的解答是 <code>myFunc</code> 已經變成<em>閉包</em>了。閉包是一種特殊的物件,其中結合了兩樣東西︰函數,和函數所建立的環境。環境由任意的局域變數所組成,這些變數是由在閉包建立的時間點上存在於作用域裡的所有變數。既然如此,<code>myFunc</code> 就是結合了 <code>displayName</code> 函數和閉包建立之後就存在的 "Mozilla" 字串這兩者的閉包。</p> +<p>這裡還有更為有趣的範例 - <code>makeAdder</code> 函數︰</p> +<pre class="brush: js">function makeAdder(x) { + return function(y) { + return x + y; + }; +} + +var add5 = makeAdder(5); +var add10 = makeAdder(10); + +print(add5(2)); // 7 +print(add10(2)); // 12 +</pre> +<p>在這個範例中,我們已經定義了函數 <code>makeAdder(x)</code>,可接受單一參數 <code>x</code>,並返回新的函數。返回的函數會接受單一參數 <code>y</code>,並返回 <code>x</code> 和 <code>y</code> 的合。</p> +<p>就本質而言,<code>makeAdder</code> 是函數的製造機 - 他會建立可以把指定的值和他們的參數相加的函數。在上例中,我們使用了我們的函數製造機來建立兩個新的函數 - 一個給他自己的參數加上 5,另一個則加上 10。</p> +<p><code>add5</code> 和 <code>add10</code> 兩個都是閉包。他們共享相同的函數本體的定義,但保存了不同的環境變數。在 <code>add5</code> 的環境中,<code>x</code> 是 5。至於互有關連的 <code>add10</code>,<code>x</code> 是 10。</p> +<h4 id="Practical_closures" name="Practical_closures">實用的閉包</h4> +<p>該是拋開理論的時候了 - 但是閉包真的有用嗎?讓我們思考閉包潛在的用處。閉包讓你把一些資料(環境)和可操作資料的函數聯繫在一起。這一點明顯和物件導向程式設式並行不悖,物件可讓我們把一些資料(物件的屬性)和一個以上的方法聯繫在一起。</p> +<p>因此,如果通常你會在某個地方使用附有單一方法的物件,你可以在這些地方使用閉包。</p> +<p>視情況你可能會想這樣做,這在 Web 上尤其常見。我們寫在 Web 上的 JavaScript 代碼多半是以事件為基礎 - 我們定義了一些行為,然後把這些行為和由使用者所觸發的事件(如 click 或 keypress)連繫在一起。我們的代碼通常被連繫為 Callback︰在回應事件時,所執行的單一函數。</p> +<p>這裡有個實際的例子︰假如我們希望在頁面上加入可以調整頁面文字的按鈕。以像素為單位,指定 body 元素的 font-size 是一個方法,然後以 em 為單位,設定在頁面上(如頁眉)的其他元素的大小︰</p> +<pre class="brush: css">body { + font-family: Helvetica, Aria, sans-serif; + font-size: 12px; +} + +h1 { + font-size: 1.5em; +} +h2 { + font-size: 1.2em; +} +</pre> +<p>我們的互動式文字大小按鈕可以改變 body 元素的 font-size 屬性,拜相對單位之賜,接著對其他的元素做調整。</p> +<p>JavaScript 代碼︰</p> +<pre class="brush: js">function makeSizer(size) { + return function() { + document.body.style.fontSize = size + 'px'; + }; +} + +var size12 = makeSizer(12); +var size14 = makeSizer(14); +var size16 = makeSizer(16); +</pre> +<p>現在 <code>size12</code>、<code>size14</code> 和 <code>size16</code> 這些函數可分別調整 body 文字的大小為 12、14 和 16 像素。我們可以把代碼和按鈕(本例中使用的是連結)連繫在一起,如下︰</p> +<pre class="brush: js">function setupButtons() { + document.getElementById('size-12').onclick = size12; + document.getElementById('size-14').onclick = size14; + document.getElementById('size-16').onclick = size16; +}</pre> +<pre class="brush: html"><a href="#" id="size-12">12</a> +<a href="#" id="size-14">14</a> +<a href="#" id="size-16">16</a> +</pre> +<p> </p> +<h4 id="Emulating_private_methods_with_closures" name="Emulating_private_methods_with_closures">使用閉包模擬私有的方法</h4> +<p>像 Java 這類語言可以把方法宣告為私有的,意思是這些方法只能被同一類別的其他方法所呼叫。</p> +<p>JavaScript 並不提供做這些事的原生方式,但可以使用閉包來模擬私有方法。私有方法不只是對限制代碼的存取這方面有用︰同時也是管理你的全域命名空間的強大方式,把非必要的方法堆在公開的界面裡。</p> +<p>這裡是如何使用閉包來定義可以存取私有函數和變數的公開函數︰</p> +<pre class="brush: js">var Counter = (function() { + var privateCounter = 0; + function changeBy(val) { + privateCounter += val; + } + return { + increment: function() { + changeBy(1); + }, + decrement: function() { + changeBy(-1); + }, + value: function() { + return privateCounter; + } + } +})(); + +alert(Counter.value()); /* 顯示 0 */ +Counter.increment(); +Counter.increment(); +alert(Counter.value()); /* 顯示 2 */ +Counter.decrement(); +alert(Counter.value()); /* 顯示 1 */ +</pre> +<p>在此完成了很多事。在上一個範例中,每一個閉包都有他自己的環境;此處我們建立了由三個函數所共享的單一環境<span style="font-family: monospace;">︰</span><code>Counter.increment</code>、<code>Counter.decrement</code>、<code>Counter.value</code>。</p> +<p>共享的環境是建立在無名函數的本體內,無名函數一經定義就會開始執行。環境內含兩個私有項︰稱作 <code>privateCounter</code> 的變數,以及稱作 <code>changeBy</code> 的函數。這兩個私有項都不能在無名函數外部被直接存取。相對的,必須由三個公開的函數來存取這些私有項,這三個函數是從無名函數的封裝器所返回的。</p> +<p>這三個公開的函數共享閉包的同一個環境。感謝 JavaScript 的辭彙作用域,這三個函數都能存取 <code>privateCounter</code> 變數和 <code>changeBy</code> 函數。</p> +<p>按照這個方式來運用閉包,可以得到通常是附加在物件導向程式設計裡的資料隱藏和封裝的好處。</p><h4 id="Creating_closures_in_loops:_A_common_mistake" name="Creating_closures_in_loops:_A_common_mistake">在循環中建立閉包︰常見的錯誤</h4> +<p>在 JavaScript 1.7 引入 <code>let</code> 關鍵字以前,閉包常見的問題出現在當閉包是在循環內部建立的時候。思考以下的例子︰</p> +<pre class="brush: html"><p id="help">這裡會顯示有用的提示</p> +<p>E-mail: <input type="text" id="email" name="email"></p> +<p>姓名: <input type="text" id="name" name="name"></p> +<p>年齡: <input type="text" id="age" name="age"></p> +</pre> +<pre class="brush: js">function showHelp(help) { + document.getElementById('help').innerHTML = help; +} + +function setupHelp() { + var helpText = [ + {'id': 'email', 'help': '你的 e-mail 位址'}, + {'id': 'name', 'help': '你的完整姓名'}, + {'id': 'age', 'help': '你的年齡(你必須大於 16 歲)'} + ]; + + for (var i = 0; i < helpText.length; i++) { + var item = helpText[i]; + document.getElementById(item.id).onfocus = function() { + showHelp(item.help); + } + } +} +</pre> +<p><code>helpText</code> 陣列定義了三個有用的提示,每一個都和文件中的輸入欄位的 ID 連繫在一起。循環會在這些定義裡巡回一圈,給每一個顯示相關連的說明的方法使用 onfocus 事件。</p> +<p>如果你試著執行這個代碼,你會發現他並不如預期般的運作。不管你把焦點放在哪一個欄位上,都會顯示關於你的年齡的訊息。</p> +<p>這其中的原因是代入給 onfocus 的函數是閉包;這些閉包是由函數的定義和從 <code>setupHelp</code> 函數的作用域所捕捉到的環境所組成的。這三個閉包已經建立了,但每一個都共享同一個環境。每次執行 onfocus 的 Callback 的時候,循環執行的是他自己的閉包,以及指向 <code>helpText</code> 列表中的最後一項的變數 item(由三個閉包所共享)。</p> +<p>本例的解決方法是使用更多的閉包︰特別是使用稍早已描述過的函數製造機︰</p> +<pre class="brush: js">function showHelp(help) { + document.getElementById('help').innerHTML = help; +} + +function makeHelpCallback(help) { + return function() { + showHelp(help); + }; +} + +function setupHelp() { + var helpText = [ + {'id': 'email', 'help': '你的 e-mail 位址'}, + {'id': 'name', 'help': '你的完整姓名'}, + {'id': 'age', 'help': '你的年齡(你必須大於 16 歲)'} + ]; + + for (var i = 0; i < helpText.length; i++) { + var item = helpText[i]; + document.getElementById(item.id).onfocus = makeHelpCallback(item.help); + } +} +</pre> +<p>這次就如預期般運作。而不是所有的 Callback 都共享單一的環境,<code>makeHelpCallback</code> 給每一個 <code>help</code> 建立新的環境,此處的 <code>help</code> 參照了相對應的 <code>helpText</code> 陣列的字串。</p> +<p>如果你使用 JavaScript 1.7 以上的版本,你可以使用 <code>let</code> 關鍵字建立具有區塊層級作用域的變數來解決這個問題︰</p> +<pre class="brush: js"> for (var i = 0; i < helpText.length; i++) { + let item = helpText[i]; + document.getElementById(item.id).onfocus = function() { + showHelp(item.help); + } + } +</pre> +<p><code>let</code> 關鍵字使 item 變數改用具有區塊層級的作用域來建立,導致 for 循環每一次反復都能建立新的參考。意思是每一個閉包都會捕捉到個別的變數,解決因為共享同一環境所引起的問題。</p><h4 id="Performance_considerations" name="Performance_considerations">效能的考量</h4> +<p>如果並沒有特定的任務需要用到閉包,且閉包對 Script 的效能會有負面的影響,因此在其他函數的內部裡建立不必要的函數是很不智的。</p> +<p>例如,當建立新的物件或類別時,通常應該要把方法和物件的原型連繫在一起,而不是在物件的建構子中定義。這其中的理由是,每當呼叫建構子的時候,就要把方法代入(也就是每一個物件正在建立的時候)。</p> +<p>思考以下不切實際的例子︰</p> +<pre class="brush: js">function MyObject(name, message) { + this.name = String(name); + this.message = String(message); + this.getName = function() { + return this.name; + }; + + this.getMessage = function() { + return this.message; + }; +} +</pre> +<p>上面的代碼並未從閉包的行為中取得好處,應該改用重整過的形式︰</p> +<pre class="brush: js">function MyObject(name, message) { + this.name = String(name); + this.message = String(message); +} +MyObject.prototype = { + getName: function() { + return this.name; + }, + getMessage: function() { + return this.message; + } +}; +</pre> +<p>或者是︰</p> +<pre class="brush: js">function MyObject(name, message) { + this.name = String(name); + this.message = String(message); +} +MyObject.prototype.getName = function() { + return this.name; +}; +MyObject.prototype.getMessage = function() { + return this.message; +}; +</pre> +<p>在上面這兩個範例中,繼承的原型可以被所有的物件所共享,而且在每一次建立物件時不再需要方法的定義。參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8#%E7%89%A9%E4%BB%B6%E6%A8%A1%E5%9E%8B%E7%9A%84%E7%B4%B0%E7%AF%80" title="zh tw/Core JavaScript 1.5 教學#物件模型的細節">Core_JavaScript_1.5_教學#物件模型的細節</a> 以取得更多細節。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的函數:escape_和_unescape_函數", "Core_JavaScript_1.5_教學:物件和屬性") }}</p> +<p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Working_with_Closures", "ja": "ja/Core_JavaScript_1.5_Guide/Working_with_Closures", "pl": "pl/Przewodnik_po_języku_JavaScript_1.5/Praca_z_zamknięciami" } ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/關於/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/關於/index.html new file mode 100644 index 0000000000..de638e2a9f --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/關於/index.html @@ -0,0 +1,47 @@ +--- +title: 關於 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/關於 +--- +<p> </p> +<h3 id="JavaScript_各版本的新機能" name="JavaScript_各版本的新機能">JavaScript 各版本的新機能</h3> +<ul> <li><a class="internal" href="/zh_tw/JavaScript_1.5_%E6%96%B0%E9%AE%AE%E4%BA%8B" title="zh tw/JavaScript 1.5 新鮮事">JavaScript 1.5 新鮮事</a></li> <li><a class="internal" href="/zh_tw/JavaScript_1.6_%E6%96%B0%E9%AE%AE%E4%BA%8B" title="zh tw/JavaScript 1.6 新鮮事">JavaScript 1.6 新鮮事</a></li> <li><a class="internal" href="/zh_tw/JavaScript_1.7_%E6%96%B0%E9%AE%AE%E4%BA%8B" title="zh tw/JavaScript 1.7 新鮮事">JavaScript 1.7 新鮮事</a></li> <li><a class="internal" href="/zh_tw/JavaScript_1.8_%E6%96%B0%E9%AE%AE%E4%BA%8B" title="zh tw/JavaScript 1.8 新鮮事">JavaScript 1.8 新鮮事</a></li> +</ul> +<h3 id="你應該知道什麼" name="你應該知道什麼">你應該知道什麼</h3> +<p>本教學假定你已具備如下背景知識︰</p> +<ul> <li>對網際網路和 World Wide Web (WWW) 有全面性的認識。</li> <li>有良好的 HyperText Markup Language (<a class="internal" href="/zh_tw/HTML" title="zh tw/HTML">HTML</a>) 基礎知識。</li> +</ul> +<p>具有某些語言(如 C 或 Visual Basic)的程式設計經驗會很有幫助,但不是必要的。</p> +<h3 id="JavaScript_的版本" name="JavaScript_的版本">JavaScript 的版本</h3> +<table class="fullwidth-table"> <tbody> <tr> <th>JavaScript 的版本</th> <th>Navigator 的版本</th> </tr> <tr> <td>JavaScript 1.0</td> <td>Navigator 2.0</td> </tr> <tr> <td>JavaScript 1.1</td> <td>Navigator 3.0</td> </tr> <tr> <td>JavaScript 1.2</td> <td>Navigator 4.0-4.05</td> </tr> <tr> <td>JavaScript 1.3</td> <td>Navigator 4.06-4.7x</td> </tr> <tr> <td>JavaScript 1.4</td> <td> </td> </tr> <tr> <td>JavaScript 1.5</td> <td>Navigator 6.0<br> Mozilla(開放源始碼的瀏覽器)</td> </tr> <tr> <td>JavaScript 1.6</td> <td><a class="internal" href="/zh_tw/Firefox_1.5_for_developers" title="zh tw/Firefox 1.5 for developers">Firefox 1.5</a>,其他以 Mozilla 1.8 為基礎的產品</td> </tr> <tr> <td>JavaScript 1.7</td> <td><a class="internal" href="/zh_tw/Firefox_2_%E6%8A%80%E8%A1%93%E6%96%87%E4%BB%B6" title="zh tw/Firefox 2 技術文件">Firefox 2</a>,其他以 Mozilla 1.8.1 為基礎的產品</td> </tr> <tr> <td>JavaScript 1.8</td> <td><a class="internal" href="/zh_tw/Firefox_3_for_developers" title="zh tw/Firefox 3 for developers">Firefox 3</a>,其他以 Gecko 1.9 為基礎的產品</td> </tr> </tbody> +</table> +<p><small><strong>表 1: JavaScript 和 Navigator 版本</strong></small><br> +<br> +Netscape Enterprise Server 的各版本亦分別支援不同的 JavaScript 版本。為幫助你編寫相容於 Enterprise Server 各版本的 Script,本教學使用略稱來表示 Server 的版本。</p> +<table class="fullwidth-table"> <tbody> <tr> <th>略稱</th> <th>Enterprise Server 的版本</th> </tr> <tr> <td>NES 2.0</td> <td>Netscape Enterprise Server 2.0</td> </tr> <tr> <td>NES 3.0</td> <td>Netscape Enterprise Server 3.0</td> </tr> </tbody> +</table> +<p><small><strong>表 2: Netscape Enterprise Server 各版本的略稱</strong></small></p> +<h3 id="在何處取得_JavaScript_資訊" name="在何處取得_JavaScript_資訊">在何處取得 JavaScript 資訊</h3> +<p>以下書藉內含核心 JavaScript 的文件︰</p> +<ul> <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8" title="zh tw/Core JavaScript 1.5 教學"> Core JavaScript 教學</a>(本教學)提供有關於核心 JavaScript 語言及其物件的資訊。</li> <li><a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83" title="zh tw/Core JavaScript 1.5 參考"> Core JavaScript 參考</a> 提供有關於核心 JavaScript 語言的參考資料。</li> +</ul> +<p>如果你是 JavaScript 的新手,就從 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8" title="zh tw/Core JavaScript 1.5 教學">Core JavaScript 教學</a> 著手。如果你已具備穩固的基礎,你可以從 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83" title="zh tw/Core JavaScript 1.5 參考">Core JavaScript 參考</a> 取得個別物件或語法的進一步細節。</p> +<h3 id="JavaScript_的學習提示" name="JavaScript_的學習提示">JavaScript 的學習提示</h3> +<p>JavaScript 的入門很簡單: 只需要有最新的 Web 瀏覽器。本教學使用了一些目前只能在最新版本的 Firefox(以及其化的 Gecko 瀏覽器)執行的 JavaScript 機能,所以建議使用最新版本的 Firefox。</p> +<h4 id="互動式解譯器" name="互動式解譯器">互動式解譯器</h4> +<p>互動式 JavaScript 的提示對於語言的學習有極大的幫助,使你不必儲存檔案或更新頁面就能以互動方式加以試驗。從 Firefox 的“工具”選單可以找到“錯誤主控台”,可提供嘗試互動式 JavaScript 的簡單途徑: 只需輸入一行代碼,並按下“執行”按鈕。</p> +<p><img alt="Image:ErrorConsole.png" class=" internal" src="/@api/deki/files/192/=ErrorConsole.png"></p> +<h4 id="Firebug" name="Firebug">Firebug</h4> +<p>更高級的互動式提示還可使用第三方擴充套件 <a class="external" href="http://www.getfirebug.com/">Firebug</a>。Firebug 提供了高級的 DOM 檢視器(JavaScript 除錯器)、分析工具和各種實用工具︰</p> +<p><img alt="Image:Firebug.png" class=" internal" src="/@api/deki/files/204/=Firebug.png"></p> +<p>其中 Firebug 提供的最有用的功能是 <code>console.log()</code>,把自己的參數輸出到 Firebug 主控台的函數。有別於其他程式語言,JavaScript 並沒有輸出至標準輸出的概念<span style="font-family: monospace;">。</span><code>console.log()</code> 提供了很有用的替代品,使你更容易觀察程式的執行。</p> +<p>本教學的許多範例中使用 <code>alert()</code> 顯示執行的訊息。如果你已安裝 Firebug,你可以使用 <code>console.log()</code> 取代 <code>alert()</code> 來執行這些範例。</p> +<h3 id="文件慣例" name="文件慣例">文件慣例</h3> +<p>JavaScript 應用程式可執行於許多的作業系統,本文的資訊可套用於所有的版本。檔案和資料夾路徑採用 Windows 格式(使用反斜線 (\) 分割資料夾名稱)。對 Unix 版本而言,資料夾路徑也是相同的,除非你使用斜線 (/) 取代反斜線來分割資料夾名稱。</p> +<p>本教學使用如下形式的 URL︰</p> +<p><code><span class="nowiki">http://server.domain/path/file.html</span></code></p> +<p>在上面的 URL 中,“server”表示執行應用程式的伺服器的名稱(例如︰research1、www),“domain”表示網際網路的域名(例如︰netscape.com、uiuc.edu),“path”表示在伺服器上的資料夾結構,“file.html”表示個別的檔名。一般來說,在 URL 裡以標準的等寬字型顯示的斜體表示是可修改的項目。如果你的伺服器已啟用 Secure Sockets Layer (SSL),URL 的 http 就應該取代為 https。</p> +<p>本教程使用如下的字型慣例︰</p> +<ul> <li><code>等寬字型(monospace font)</code>用於範例代碼和代碼列表、API 和語言元素(方法名和屬性名等等)、檔案名稱、路徑名稱、資料夾名稱、HTML 標記,以及必須輸入在螢幕上的文字。(等寬斜體字型用來表示代碼裡的可修改項。)</li> <li><em>斜體(Italic type)</em>用於標題、強調、變數和可修改項,以及按字面表示的文字。</li> <li><strong>粗體(Boldface)</strong>用於術語。</li> +</ul> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學", "Core_JavaScript_1.5_教學:JavaScript_概要") }}</p> +<p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/About", "es": "es/Gu\u00eda_JavaScript_1.5/Acerca_de_esta_gu\u00eda", "fr": "fr/Guide_JavaScript_1.5/\u00c0_propos", "ja": "ja/Core_JavaScript_1.5_Guide/About", "ko": "ko/Core_JavaScript_1.5_Guide/About", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/O_tym_przewodniku", "zh-cn": "cn/Core_JavaScript_1.5_Guide/\u5173\u4e8e" } ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的函數/parseint_和_parsefloat_函數/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的函數/parseint_和_parsefloat_函數/index.html new file mode 100644 index 0000000000..65d1287175 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的函數/parseint_和_parsefloat_函數/index.html @@ -0,0 +1,21 @@ +--- +title: parseInt 和 parseFloat 函數 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的函數/parseInt_和_parseFloat_函數 +--- +<p> </p> +<div class="onlyinclude"> +<h4 id="parseInt_和_parseFloat_函數">parseInt 和 parseFloat 函數</h4> +<p>這兩個〝分析〞<span style="font-family: monospace;">函數,</span><code>parseInt</code> 和 <code>parseFloat</code>,會在給與字串作為參數時返回數值。</p> +<p><code>parseFloat</code> 的語句如下</p> +<pre>parseFloat(str) +</pre> +<p>此處的 <code>parseFloat</code> 會分析他自己的參數,字串 <code>str</code>,並試著返回浮點數。如果遇到正負符號 (+ 或 -)、數字 (0-9)、小數點、指數以外的字元,他就會返回在此之前的數值,並忽略那些字元。如果連第一個字元也不可以轉換為數字,就會返回〝NaN〞(不是數字)。</p> +<p><code>parseInt</code> 的語句如下</p> +<pre>parseInt(str [, radix]) +</pre> +<p><code>parseInt</code> 會分析他自己的參數,字串 <code>str</code>,並試著返回由第二個參數所指定的 <code>radix</code> (基數)的整數。<code>radix</code> 為選用性參數。舉例來說,以 10 為底的基數表示要轉換為十進制數,8 是八進制,16 是十六進制,依此類推。對於 10 以上的基數,就會使用字母來表示大於九的數字。例如,十六進制數(基數 16),就會用到 A 到 F 的字母。</p> +<p>如果 <code>parseInt</code> 遇到不是在指定基數之內的字元,就會直接忽略這個字元及其隨後字元,並返回在此之前已經分析出來的整數值。如果連第一個字元也不可以轉換為指定基數之內的字元,就會返回〝NaN〞。<code>parseInt</code> 函數會切除字串以取得整數值。</p> +</div> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的函數:isNaN_函數", "Core_JavaScript_1.5_教學:預先定義的函數:Number_和_String_函數") }}</p> +<p>{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Predefined_Functions/parseInt_and_parseFloat_Functions", "es": "es/Gu\u00eda_JavaScript_1.5/Funciones_predefinidas/Funciones_parseInt_y_parseFloat", "fr": "fr/Guide_JavaScript_1.5/Fonctions_pr\u00e9d\u00e9finies/Les_fonctions_parseInt_et_parseFloat", "ja": "ja/Core_JavaScript_1.5_Guide/Predefined_Functions/parseInt_and_parseFloat_Functions", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Funkcje_predefiniowane/Funkcje_parseInt_i_parseFloat" } ) }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/array_物件/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/array_物件/index.html new file mode 100644 index 0000000000..a806c4dfac --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/array_物件/index.html @@ -0,0 +1,151 @@ +--- +title: Array 物件 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Array_物件 +--- +<p> </p> +<h3 id="Array_物件" name="Array_物件">Array 物件</h3> +<p>JavaScript 並沒有明確的陣列資料類型。不過你可以在你的應用程式中,使用預先定義的 <code>Array</code> 物件和他的方法來運用陣列。<code>Array</code> 物件有各種陣列的操作方法,如合併、反轉、排序。他還有用來確定陣列的長度的屬性,還有和正規表達式一起使用的屬性。</p> +<p><em>陣列</em>是值的有序集合,你可以使用名稱或索引來參考這些值。例如,你有一個稱作 <code>emp</code> 的陣列,其中內含職員的名字,並按照職員的編號來索引。於是 <code>emp{{ mediawiki.external(1) }}</code> 就代表編號 1 的職員,<code>emp{{ mediawiki.external(2) }}</code> 就代表編號 2 的職員,依此類推。</p> +<p> </p> +<h4 id="陣列的建立" name="陣列的建立">陣列的建立</h4> +<p><code>Array</code> 物件的建立如下︰</p> +<pre>1. arrayObjectName = new Array(element0, element1, ..., elementN) +2. arrayObjectName = new Array(arrayLength) +</pre> +<p><code>arrayObjectName</code> 就是新物件的名稱、或者是既存物件的屬性。當使用 <code>Array</code> 的屬性和方法的時候,<code>arrayObjectName</code> 就是既存的 <code>Array</code> 物件的名稱、或者是既存物件的屬性。</p> +<p><code>element0, element1, ..., elementN</code> 就是陣列元素的值的列表。如果指定了這個形式的話,陣列就會以指定的值作為元素來初始化,且陣列的 length 屬性會被設為參數的數目。</p> +<p><code>arrayLength</code> 就是陣列的初期長度。下面的代碼建立帶有五個元素的陣列︰</p> +<pre>billingMethod = new Array(5) +</pre> +<p>陣列的字面表達同時也是 <code>Array</code> 物件;舉例來說,下面的字面表達就是 <code>Array</code> 物件。參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E5%AD%97%E9%9D%A2%E8%A1%A8%E9%81%94#%E9%99%A3%E5%88%97%E7%9A%84%E5%AD%97%E9%9D%A2%E8%A1%A8%E9%81%94" title="zh tw/Core JavaScript 1.5 教學/字面表達#陣列的字面表達">陣列的字面表達</a> 以取得陣列的字面表達的細節。</p> +<pre>coffees = ["French Roast", "Columbian", "Kona"] +</pre> +<h4 id="陣列的操作" name="陣列的操作">陣列的存放</h4> +<p>你可以藉由把值代入給陣列自己的元素的方式來存放到陣列裡。例如,</p> +<pre>emp[1] = "Casey Jones" +emp[2] = "Phil Lesh" +emp[3] = "August West" +</pre> +<p>你也可以在建立陣列的同時來作存放︰</p> +<pre>myArray = new Array("Hello", myVar, 3.14159) +</pre> +<h4 id="陣列元素的參考" name="陣列元素的參考">陣列元素的參考</h4> +<p>你可以使用元素的序號來參考陣列的元素。例如,假設你定義了如下的陣列︰</p> +<pre>myArray = new Array("Wind","Rain","Fire") +</pre> +<p>然後你可以使用 <code>myArray{{ mediawiki.external(0) }}</code> 來參考第一個元素,使用 <code>myArray{{ mediawiki.external(1) }}</code> 來參考第二個元素。</p> +<p>元素的索引是從零 (0) 開始的,不過陣列的長度(例如,<code>myArray.length</code>)反映的是陣列中的元素的數目。</p> +<h4 id="Array_的方法" name="Array_的方法">Array 的方法</h4> +<p><code>Array</code> 物件有以下的方法︰</p> +<ul> + <li><code>concat</code> 合併兩個陣列,並把新的陣列返回。</li> +</ul> +<p> </p> +<pre class="eval"> myArray = new Array("1","2","3") + myArray = myArray.concat("a", "b", "c"); // myArray 現在是 ["1", "2", "3", "a", "b", "c"] +</pre> +<p> </p> +<ul> + <li><code>join(deliminator = ",")</code> 把所有的陣列元素合併成字串。</li> +</ul> +<p> </p> +<pre class="eval"> myArray = new Array("Wind","Rain","Fire") + list = myArray.join(" - "); // list 的內容是 "Wind - Rain - Fire" +</pre> +<p> </p> +<ul> + <li><code>pop</code> 把陣列的最後一個元素移除掉,並把元素返回。</li> +</ul> +<p> </p> +<pre class="eval"> myArray = new Array("1", "2", "3"); + last=myArray.pop(); // MyArray 現在是 ["1", "2"], last = "3" +</pre> +<p> </p> +<ul> + <li><code>push</code> 在陣列的末端加入一個以上的元素,並返回陣列的最終長度。</li> +</ul> +<p> </p> +<pre class="eval"> myArray = new Array("1", "2"); + myArray.push("3"); // MyArray 現在是 ["1", "2", "3"] +</pre> +<p> </p> +<ul> + <li><code>reverse</code> 調換陣列的元素︰陣列的第一個元素變成最後一個元素,最後一個則變成第一個。</li> +</ul> +<p> </p> +<pre class="eval"> myArray = new Array ("1", "2", "3"); + myArray.reverse(); // 調換陣列的結果是 myArray = [ "3", "2", "1" ] +</pre> +<p> </p> +<ul> + <li><code>shift</code> 移除陣列的第一個元素,並返回被移除的元素。</li> +</ul> +<p> </p> +<pre class="eval"> myArray = new Array ("1", "2", "3"); + first=myArray.shift(); // MyArray 現在是 ["2", "3"],first 是 "1" +</pre> +<p> </p> +<ul> + <li><code>slice (start_index, upto_index)</code> 抽出陣列的片斷,並返回新的陣列。</li> +</ul> +<p> </p> +<pre class="eval"> myArray = new Array ("a", "b", "c", "d", "e"); + myArray = myArray.slice(1,4); // 從索引 1 為起點抽出所有的元素,直到索引 4 為止,返回 [ "b", "c", "d" ] +</pre> +<p> </p> +<ul> + <li><code>splice(index, count_to_remove, addelement1, addelement2, ...)</code> 加入並/或移除陣列的元素。</li> +</ul> +<p> </p> +<pre class="eval"> myArray = new Array ("1", "2", "3", "4", "5"); + myArray.splice(1,3,"a","b","c", "d"); // MyArray 現在是 ["1", "a", "b", "c", "d", "5"] + // 這個代碼從索引 1(也就是 "2")開始,把那裡的 3 個元素移除掉, + // 然後把所有的連續元素插入到那個位置。 +</pre> +<p> </p> +<ul> + <li><code>sort</code> 把陣列的元素重新排序。</li> +</ul> +<p> </p> +<pre class="eval"> myArray = new Array("Wind","Rain","Fire") + myArray.sort(); // 排序陣列的結果是 myArrray = [ "Fire", "Rain", "Wind" ] +</pre> +<p> </p> +<p><code>sort</code> 也接受 Callback 函數以確定該如何排序陣列的內容。這個函數會對兩個值作比較,並返回三個值的其中一者︰</p> +<ul> + <li>如果 a 在排序系統中小於 b,返回 -1(或任意的負數)</li> + <li>如果 a 在排序系統中大於 b,返回 1(或任意的正數)</li> + <li>如果 a 和 b 被認為是同等的,返回 0。</li> +</ul> +<p>舉例來說,下面的代碼將以陣列最後面的字母來排序︰</p> +<p> </p> +<pre class="eval"> var sortFn = function(a,b){ + if (a[a.length - 1] < b[b.length - 1]) return -1; + if (a[a.length - 1] > b[b.length - 1]) return 1; + if (a[a.length - 1] == b[b.length - 1]) return 0; + } + myArray.sort(sortFn); // 排序陣列的結果是 myArray = ["Wind","Fire","Rain"] +</pre> +<p> </p> +<ul> + <li><code>unshift</code> 在陣列的前頭加入一個以上的元素,並返回陣列的新長度。</li> +</ul> +<h4 id="二維陣列" name="二維陣列">二維陣列</h4> +<p>下面的代碼建立二維陣列。</p> +<pre>a = new Array(4) +for (i=0; i < 4; i++) { + a[i] = new Array(4) + for (j=0; j < 4; j++) { + a[i][j] = "["+i+","+j+"]" + } +} +</pre> +<p>本例以如下的行來建立陣列︰</p> +<pre>行 0:[0,0][0,1][0,2][0,3] +行 1:[1,0][1,1][1,2][1,3] +行 2:[2,0][2,1][2,2][2,3] +行 3:[3,0][3,1][3,2][3,3] +</pre> +<h4 id="陣列和正規表達式" name="陣列和正規表達式">陣列和正規表達式</h4> +<p>如果有一個陣列是正規表達式和字串之間比對的結果,這個陣列會返回有關比對的資訊的屬性和元素。陣列可以是 <code>RegExp.exec</code>、<code>String.match</code>、<code>String.split</code> 的返回值。若需要與正規表達式一同使用陣列的資訊,詳見第四章,<a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8#%E6%AD%A3%E8%A6%8F%E8%A1%A8%E9%81%94%E5%BC%8F" title="zh tw/Core JavaScript 1.5 教學#正規表達式">正規表達式</a>。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Boolean_物件") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/boolean_物件/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/boolean_物件/index.html new file mode 100644 index 0000000000..02648f7073 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/boolean_物件/index.html @@ -0,0 +1,12 @@ +--- +title: Boolean 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Boolean_物件 +--- +<p> </p> +<h3 id="Boolean_物件" name="Boolean_物件">Boolean 物件</h3> +<p><code>Boolean</code> 物件是原始的 Boolean 資料類型包裝而成。使用下面的語法來建立 <code>Boolean</code> 物件︰</p> +<pre>booleanObjectName = new Boolean(value) +</pre> +<p>別把原始的布林值的 <code>true</code> 和 <code>false</code> 與 <code>Boolean</code> 物件的 true 和 false 值給混淆了。任何物件的值只要不是 <code>undefined</code>、<code>null</code>、<code>0</code>、<code>NaN</code>、空字串,即使是值為 false 的 <code>Boolean</code> 物件,當傳入到條件語句裡的時候,其求值結果仍為 true。參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8/%E6%A2%9D%E4%BB%B6%E8%AA%9E%E6%B3%95#if...else_%E8%AA%9E%E6%B3%95" title="zh tw/Core JavaScript 1.5 教學/條件語法#if...else 語法">if...else 語法</a> 取得更進一步資訊。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Array_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Date_物件") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/date_物件/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/date_物件/index.html new file mode 100644 index 0000000000..ca94741f14 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/date_物件/index.html @@ -0,0 +1,82 @@ +--- +title: Date 物件 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Date_物件 +--- +<p> </p> +<h3 id="Date_物件" name="Date_物件">Date 物件</h3> +<p>JavaScript 並沒有日期的資料類型。不過你可以在你的應用程式中使用 <code>Date</code> 物件及其方法來使用日期和時間。<code>Date</code> 物件有非常大量的方法可用來設定、取得、操作日期。不過沒有任何的屬性。</p> +<p>JavaScript 處理日期的方式很類似 Java。這兩個語言有很多同樣的日期方法,而且這兩個語言都是以 1970 年 1 月 1 日 00:00:00 開始的毫秒數來儲存日期。</p> +<p>Date 物件的範圍是以 1970 年 1 月 1 日 (UTC) 為基準,從 -100,000,000 日一直到 100,000,000 日。</p> +<p>如下建立 <code>Date</code> 物件︰</p> +<pre>dateObjectName = new Date([parameters]) +</pre> +<p>此處的 <code>dateObjectName</code> 就是將要建立的 <code>Date</code> 物件的名稱;他可以是新的物件或是既存物件的屬性。</p> +<p>前敘語法中的 <code>parameters</code> 可以是下列的任何一種形式︰</p> +<ul> + <li>沒有參數︰建立今天的日期和時間。例如,<code>today = new Date()</code>。</li> + <li>以此格式表示日期的字串︰"月 日, 年 時:分:秒"。例如,<code>Xmas95 = new Date("December 25, 1995 13:30:00")</code>。如果你省略了時、分、秒,這些值會被設為零。</li> + <li>一組年、月、日的整數值。例如,<code>Xmas95 = new Date(1995,11,25)</code>。</li> + <li>一組年、月、日、時、分、秒的整數值。例如,<code>Xmas95 = new Date(1995,11,25,9,30,0)</code>。</li> +</ul> +<p><strong>JavaScript 1.2 及早期版本</strong><br> + <code>Date</code> 物件的行為如下︰</p> +<ul> + <li>不允許使用 1970 年以前的日期。</li> + <li>JavaScript 依靠平台特有的日期之便及其行為;平台與平台之間,<code>Date</code> 物件的行為有所不同。</li> +</ul> +<h4 id="Methods_of_the_Date_Object" name="Methods_of_the_Date_Object">Date 物件的方法</h4> +<p>用於處理日期和時間的 <code>Date</code> 物件的方法主要可分為這幾類︰</p> +<ul> + <li>"set" 方法,用於設定 <code>Date</code> 物件的日期和時間的值。</li> + <li>"get" 方法,用於取得 <code>Date</code> 物件的日期和時間的值。</li> + <li>"to" 方法,用於從 <code>Date</code> 物件返回字串值。</li> + <li>parse 和 UTC 方法,用於分析 <code>Date</code> 字串。</li> +</ul> +<p>使用 "get" 和 "set" 方法,你可以分別取得或設定秒、分、時、日、星期、月、年。還有 <code>getDay</code> 方法可返回星期,但沒有相對應的 <code>setDay</code> 方法,因為星期會自動設定。這些方法使用整數來表示如下的這些值︰</p> +<ul> + <li>秒和分︰0 至 59</li> + <li>時︰0 至 23</li> + <li>星期︰0(星期日)至 6(星期六)</li> + <li>日︰1 至 31(月份裡的某一日)</li> + <li>月︰0(一月)至 11(十二月)</li> + <li>年︰從 1900 年起</li> +</ul> +<p>舉例來說,假設你定義了如下日期︰</p> +<pre>Xmas95 = new Date("December 25, 1995") +</pre> +<p><code>Xmas95.getMonth()</code> 返回 11,而 <code>Xmas95.getFullYear()</code> 返回 1995。</p> +<p><code>getTime</code> 和 <code>setTime</code> 方法對於日期的比較來說很有用。<code>getTime</code> 方法返回自 1970 年 1 月 1 日 00:00:00 以來的毫秒數。</p> +<p>例如,下面的代碼顯示今年的剩餘天數︰</p> +<pre>today = new Date() +endYear = new Date(1995,11,31,23,59,59,999) // 設定日和月 +endYear.setFullYear(today.getFullYear()) // 設定為今年 +msPerDay = 24 * 60 * 60 * 1000 // 一天的毫秒數 +daysLeft = (endYear.getTime() - today.getTime()) / msPerDay +daysLeft = Math.round(daysLeft) // 返回今年的剩餘天數 +</pre> +<p>本範例建立了名為 today 的 <code>Date</code> 物件,其中內含有今天的日期。然後,使用一天的毫秒數,計算今天和 <code>endYear</code> 之間的天數,使用 <code>getTime</code> 並捨入為天數。</p> +<p>The <code>parse</code> 方法對於把值從日期字串代入到既存的 <code>Date</code> 物件來說很有用。例如,下面的代碼使用 <code>parse</code> 和 <code>setTime</code> 把日期的值代入到 <code>IPOdate</code> 物件︰</p> +<pre>IPOdate = new Date() +IPOdate.setTime(Date.parse("Aug 9, 1995")) +</pre> +<h4 id="Using_the_Date_Object:_an_Example" name="Using_the_Date_Object:_an_Example">Date 物件的使用︰範例</h4> +<p>在下面的範例中,函數 <code>JSClock()</code> 返回以數位時鐘為格式的時間。</p> +<pre>function JSClock() { + var time = new Date() + var hour = time.getHours() + var minute = time.getMinutes() + var second = time.getSeconds() + var temp = "" + ((hour > 12) ? hour - 12 : hour) + if (hour == 0) + temp = "12"; + temp += ((minute < 10) ? ":0" : ":") + minute + temp += ((second < 10) ? ":0" : ":") + second + temp += (hour >= 12) ? " P.M." : " A.M." + return temp +} +</pre> +<p><code>JSClock</code> 函數首先建立稱為 <code>time</code> 的新 Date 物件;因為沒有提供參數,time 會以今天的日期和時間來建立。然後呼叫 <code>getHours</code>、<code>getMinutes</code>、<code>getSeconds</code> 方法把時、分、秒的值代入到 <code>hour</code>、<code>minute</code>、<code>second</code>。</p> +<p>以下的四個語句會以 time 為基準建立字串。第一個語句建立變數 <code>temp</code>,使用條件表達式把值代入;如果 <code>hour</code> 大於 12,就會是 (hour - 12),否則會是單純的 hour,除非 hour 為 0,這時就會是 12。</p> +<p>下一個語句把 <code>minute</code> 的值附加到 temp 裡。如果 <code>minute</code> 的值小於 10,條件表達式就會加上前置為零的字串;否則加上分隔用分號的字串。接下來的語句把秒的值以同樣方式附加到 temp。</p> +<p>最後,如果 <code>hour</code> 大於 12,條件表達式就把 "PM" 附加到 temp;否則就把 "AM" 附加到 <code>temp</code>。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Boolean_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Function_物件") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/function_物件/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/function_物件/index.html new file mode 100644 index 0000000000..4acf1e73ca --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/function_物件/index.html @@ -0,0 +1,45 @@ +--- +title: Function 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Function_物件 +--- +<p> </p> +<h3 id="Function_物件" name="Function_物件">Function 物件</h3> +<p>預先定義的 <code>Function</code> 物件會把指定的 JavaScript 字串的代碼編譯成函數。</p> +<p>建立 <code>Function</code> 物件如下︰</p> +<pre>functionObjectName = new Function ([arg1, arg2, ... argn], functionBody) +</pre> +<p><code>functionObjectName</code> 就是變數的名稱或既存物件的屬性。他也可以是後跟小寫的事件處理器名稱的物件,如 <code>window.onerror</code>。</p> +<p><code>arg1</code>, <code>arg2</code>, ... <code>argn</code> 就是要被函數用作形式參數的名稱的參數。其中每一個都必須是字串,並合於有效的 JavaScript 識別子。例如 "x" 或 "theForm"。</p> +<p><code>functionBody</code> 就是指定的 JavaScript 代碼的字串,將會編譯成函數本體。</p> +<p><code>Function</code> 物件會在每一次被用到時求值。這比宣告函數並在你的代碼中呼叫還要沒效率,因為宣告過的函數已經編譯過了。</p> +<p>除了此處所描述的函數的定義方式以外,你也可以使用 <code>function</code> 語句和函數的表達式。參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83" title="zh tw/Core JavaScript 1.5 參考">Core JavaScript 1.5 參考</a> 取得更進一步資訊。</p> +<p>下面的代碼把函數代入到變數 <code>setBGColor</code>。這個函數會設定目前文件的背景色。</p> +<pre>var setBGColor = new Function("document.bgColor='antiquewhite'") +</pre> +<p>若要呼叫這個 <code>Function</code> 物件,你可以把指定的變數名稱如同函數一般來使用。下面的代碼執行了由 <code>setBGColor</code> 變數所指定的函數︰</p> +<pre>var colorChoice="antiquewhite" +if (colorChoice=="antiquewhite") {setBGColor()} +</pre> +<p>你可以使用下列任一方式把函數代入給事件處理器︰</p> +<pre>1. document.form1.colorButton.onclick=setBGColor +2. <INPUT NAME="colorButton" TYPE="button" + VALUE="Change background color" + onClick="setBGColor()"> +</pre> +<p>上面所建立的變數 <code>setBGColor</code> 類似於宣告下面的函數︰</p> +<pre>function setBGColor() { + document.bgColor='antiquewhite' +} +</pre> +<p>把函數代入給變數類似於宣告函數,但有幾點不同︰</p> +<ul> + <li>當你使用 <code>var <code>setBGColor = new Function("...")</code></code> 把函數代入給變數時,<code>setBGColor</code> 只是參照以 <code>new <code>Function()</code></code> 建立的函數的變數。</li> + <li>當你使用 <code>function setBGColor() {...}</code> 建立函數,<code>setBGColor</code> 並不是變數,而是函數的名稱。</li> +</ul> +<p>你可以在函數的內部嵌入函數。內嵌的(內部)函數對於包含這個函數的(外部)函數而言是私有的︰</p> +<ul> + <li>只能由外部函數裡面的語句來存取內部函數。</li> + <li>內部函數可以使用外部函數的參數和變數。外部函數不能使用內部函數的參數和變數。</li> +</ul> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Date_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Math_物件") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/math_物件/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/math_物件/index.html new file mode 100644 index 0000000000..8aa6bb0223 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/math_物件/index.html @@ -0,0 +1,69 @@ +--- +title: Math 物件 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Math_物件 +--- +<p> </p> +<h3 id="Math_物件" name="Math_物件">Math 物件</h3> +<p>預先定義的 <code>Math</code> 物件具有針對數學常數和函數的屬性和方法。例如,<code>Math</code> 物件的 <code>PI</code> 屬性有圓周率的值 (3.141...),你可以在應用程式中如下使用。</p> +<pre>Math.PI +</pre> +<p>同樣的,Math 的方法就是標準的數學函數。其中包括三角函數、對數函數、指數函數、以及其他函數。例如,如果你想要使用三角函數 sine,你可以如下編寫。</p> +<pre>Math.sin(1.56) +</pre> +<p>注意,<code>Math</code> 所有的三角函數的方法只接受以弧度為單位的參數。</p> +<p>下表列出了 <code>Math</code> 物件的方法。</p> +<table class="fullwidth-table"> + <tbody> + <tr> + <th>方法</th> + <th>說明</th> + </tr> + <tr> + <td>abs</td> + <td>絕對值。</td> + </tr> + <tr> + <td>sin, cos, tan</td> + <td>標準三角函數;參數以弧度為單位。</td> + </tr> + <tr> + <td>acos, asin, atan, atan2</td> + <td>反三角函數;返回值以弧度為單位。</td> + </tr> + <tr> + <td>exp, log</td> + <td>指數函數和以 <sub>e</sub> 為底的自然對數。</td> + </tr> + <tr> + <td>ceil</td> + <td>返回大於等於參數的最小整數。</td> + </tr> + <tr> + <td>floor</td> + <td>返回小於等於參數的最大整數。</td> + </tr> + <tr> + <td>min, max</td> + <td>返回兩個參數中最大的或最小的。</td> + </tr> + <tr> + <td>pow</td> + <td>指數函數;第一個參數為底數,第二個為指數。</td> + </tr> + <tr> + <td>random</td> + <td>返回介於 0 和 1 之間的隨機數。</td> + </tr> + <tr> + <td>round</td> + <td>把參數捨入至最接近的整數。</td> + </tr> + <tr> + <td>sqrt</td> + <td>平方根。</td> + </tr> + </tbody> +</table> +<p><small><strong>表 7.1: Math 的方法</strong></small></p> +<p>有別於其他的物件,你永遠不需要自行建立 <code>Math</code> 物件。你永遠可以使用預先定義的 <code>Math</code> 物件。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Function_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Number_物件") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/number_物件/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/number_物件/index.html new file mode 100644 index 0000000000..01ff1ca26f --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/number_物件/index.html @@ -0,0 +1,80 @@ +--- +title: Number 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Number_物件 +--- +<p> </p> +<h3 id="Number_物件" name="Number_物件">Number 物件</h3> +<p>The <code>Number</code> 物件具有用於數值常數的屬性,如最大值、非數字、無限大。你不能改變這些屬性的值,你可以如下使用這些屬性︰</p> +<pre>biggestNum = Number.MAX_VALUE +smallestNum = Number.MIN_VALUE +infiniteNum = Number.POSITIVE_INFINITY +negInfiniteNum = Number.NEGATIVE_INFINITY +notANum = Number.NaN +</pre> +<p>你永遠可以如上方式參照預先定義的 <code>Number</code> 物件的屬性,而不是參照你自己建立的 <code>Number</code> 物件的屬性。</p> +<p>下表列出 <code>Number</code> 物件的屬性。</p> +<table class="fullwidth-table"> + <tbody> + <tr> + <th>屬性</th> + <th>說明</th> + </tr> + <tr> + <td>MAX_VALUE</td> + <td>所能表示的最大的數字</td> + </tr> + <tr> + <td>MIN_VALUE</td> + <td>所能表示的最小的數字</td> + </tr> + <tr> + <td>NaN</td> + <td>特殊的 "not a number"(非數字)值</td> + </tr> + <tr> + <td>NEGATIVE_INFINITY</td> + <td>特殊的負無限大的值;溢出時返回</td> + </tr> + <tr> + <td>POSITIVE_INFINITY</td> + <td>特殊的正無限大的值;溢出時返回</td> + </tr> + </tbody> +</table> +<p><small><strong>表 7.2: Number 的屬性</strong></small></p> +<p>Number 的原型提供從 Number 物件取得各種格式的資訊的方法。下表列出 <code>Number.prototype</code> 的方法。</p> +<table class="fullwidth-table"> + <tbody> + <tr> + <th>方法</th> + <th>說明</th> + </tr> + <tr> + <td>toExponential</td> + <td>返回以指數符號表示的數字的字串。</td> + </tr> + <tr> + <td>toFixed</td> + <td>返回以固定小數點表示的數字的字串。</td> + </tr> + <tr> + <td>toPrecision</td> + <td>返回以指定精度的固定小數點表示的數字的字串。</td> + </tr> + <tr> + <td>toSource</td> + <td>返回表示指定的 Number 物件的字面表達。你可以使用這個值來建立新的物件。覆蓋 Object.toSource 方法。</td> + </tr> + <tr> + <td>toString</td> + <td>返回表示指定物件的字串。覆蓋 Object.toString 方法。</td> + </tr> + <tr> + <td>valueOf</td> + <td>返回指定物件的原始值。覆蓋 Object.valueOf 方法。</td> + </tr> + </tbody> +</table> +<p><small><strong>表 7.3: Number.prototype 的方法</strong></small></p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Math_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:RegExp_物件") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/regexp_物件/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/regexp_物件/index.html new file mode 100644 index 0000000000..6d26e86067 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/regexp_物件/index.html @@ -0,0 +1,9 @@ +--- +title: RegExp 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/RegExp_物件 +--- +<p> </p> +<h3 id="RegExp_物件" name="RegExp_物件">RegExp 物件</h3> +<p><code>RegExp</code> 物件可讓你運用正規表達式。已在第 4 章中解說過,<a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E6%95%99%E5%AD%B8#%E6%AD%A3%E8%A6%8F%E8%A1%A8%E9%81%94%E5%BC%8F" title="zh tw/Core JavaScript 1.5 教學#正規表達式">正規表達式</a>。</p> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Number_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:String_物件") }}</p> diff --git a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/string_物件/index.html b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/string_物件/index.html new file mode 100644 index 0000000000..9e18d6ca98 --- /dev/null +++ b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/預先定義的核心物件/string_物件/index.html @@ -0,0 +1,88 @@ +--- +title: String 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/String_物件 +--- +<p> </p> +<h3 id="String_物件" name="String_物件">String 物件</h3> +<p><code>String</code> 物件只有一個屬性,<code>length</code>,用來指明字串中的字元數目。例如,下面的代碼把 13 的值代入給 <code>x</code>,因為 "Hello, World!" 有 13 個字元︰</p> +<pre>mystring = "Hello, World!" +x = mystring.length +</pre> +<p><code>String</code> 物件有兩種類型的方法︰一種是返回對字串本身的修改,如 <code>substring</code> 和 <code>toUpperCase</code>,另一種是返回字串的 HTML 格式版本,如 <code>bold</code> 和 <code>link</code>。</p> +<p>舉例來說,延用前面的例子,<code>mystring.toUpperCase()</code> 和 <code>"hello, world!".toUpperCase()</code> 都會返回字串 "HELLO, WORLD!"。</p> +<p><code>substring</code> 方法接受兩個參數,並返回介於兩個參數之間的字串的子集。延用前面的例子,<code>mystring.substring(4, 9)</code> 返回字串 "o, Wo"。參閱 <a class="internal" href="/zh_tw/Core_JavaScript_1.5_%E5%8F%83%E8%80%83" title="zh tw/Core JavaScript 1.5 參考">Core JavaScript 參考</a> 中的 String 物件的 <code>substring</code> 方法,以取得更進一步資訊。</p> +<p><code>String</code> 物件也有大量的針對自動的 HTML 格式化的方法,如 bold 建立粗體文字,link 建立超連結。例如,你可以使用 link 方法建立連結到某個 URL 的超連結,如下︰</p> +<pre>mystring.link("http://www.helloworld.com") +</pre> +<p>下表列出 <code>String</code> 物件的方法。</p> +<table class="fullwidth-table"> + <tbody> + <tr> + <th>方法</th> + <th>說明</th> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/anchor" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/anchor">anchor</a></td> + <td>建立已命名的 HTML 錨點。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/big" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/big">big</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/blink" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/blink">blink</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/bold" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/bold">bold</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/fixed" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/fixed">fixed</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/italics" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/italics">italics</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/small" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/small">small</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/strike" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/strike">strike</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/sub" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/sub">sub</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/sup" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/sup">sup</a></td> + <td>建立 HTML 格式的字串。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/charAt" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/charAt">charAt</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/charCodeAt" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/charCodeAt">charCodeAt</a></td> + <td>返回字串中指定位置的字元或者字元內碼。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/indexOf" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/indexOf">indexOf</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/lastIndexOf" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/lastIndexOf">lastIndexOf</a></td> + <td>返回字串中指定子字串的位置,或指定子字串的最後的位置。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/link" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/link">link</a></td> + <td>建立 HTML 超連結。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/concat" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/concat">concat</a></td> + <td>合併兩個字串的文字,並返回新的字串。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/fromCharCode" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/fromCharCode">fromCharCode</a></td> + <td>從指定的 Unicode 值的序列建構字串。這是 String 類別的方法,而不是 String 實體的。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/split" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/split">split</a></td> + <td>藉由把字串分成子字串的方式,把 String 物件分割成字串的陣列。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/slice" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/slice">slice</a></td> + <td>抽出字串的片斷,並返回新的字串。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/substring" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/substring">substring</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/substr" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/substr">substr</a></td> + <td>以指定的起始或終止索引、或起始索引和長度,返回指定字串的子集。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/match" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/match">match</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace">replace</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/search" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/search">search</a></td> + <td>與正則表達式配合使用。</td> + </tr> + <tr> + <td><a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/toLowerCase" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/toLowerCase">toLowerCase</a>, <a href="/en/Core_JavaScript_1.5_Reference/Global_Objects/String/toUpperCase" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/toUpperCase">toUpperCase</a></td> + <td>返回全是大寫或全是小寫的字串。</td> + </tr> + </tbody> +</table> +<p><small><strong>表 7.4: String 實體的方法</strong></small></p> +<h3 id="String_Literals_are_Not_String_Objects" name="String_Literals_are_Not_String_Objects">字串的字面表達並不是 String 物件</h3> +<p><code>String</code> 物件只是字串的原始資料類型的包裝而已。別把字串的字面表達和 <code>String</code> 物件相混淆了。例如,下面的代碼建立字串的字面表達 <code>s1</code> 和 String 物件 <code>s2</code>︰</p> +<pre>s1 = "foo" // 建立字串的字面表達值 +s2 = new String("foo") // 建立 String 物件 +</pre> +<p>你可以在字串的字面表達值上呼叫所有的 <code>String</code> 物件的方法—JavaScript 會自動把字串的字面表達轉換成臨時的 <code>String</code> 物件,呼叫其方法,然後丟棄臨時的 <code>String</code> 物件。你也可以在字面表達上使用 <code>String.length</code> 屬性。</p> +<p>你應該使用字串的字面表達,除非你確定需要使用 <code>String</code> 物件,因為 <code>String</code> 物件會有反直覺的行為。例如︰</p> +<pre>s1 = "2 + 2" // 建立字串的字面表達值 +s2 = new String("2 + 2") //建立 String 物件 +eval(s1) // 返回數字 4 +eval(s2) // 返回字串 "2 + 2" +</pre> +<p>{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:RegExp_物件", "Core_JavaScript_1.5_教學:繼承") }}</p> diff --git a/files/zh-tw/orphaned/web/svg/教學/index.html b/files/zh-tw/orphaned/web/svg/教學/index.html new file mode 100644 index 0000000000..5521386506 --- /dev/null +++ b/files/zh-tw/orphaned/web/svg/教學/index.html @@ -0,0 +1,13 @@ +--- +title: 教學 +slug: Web/SVG/教學 +--- +<p> </p> +<p><br> +本教學解說 <a href="/zh_tw/SVG" title="zh tw/SVG">SVG</a>(Scalable Vector Graphics)的 1.1 版本,是一種 W3C XML 的衍伸語言,且已部分實裝於 Firefox 1.5、Opera 8.5 還有其他的瀏覽器。</p> +<p>本教學仍處於<strong>非常</strong>早期的階段。如果可能的話,請幫忙彙整並寫成一、兩個段落。為本教學增添內容!</p> +<h5 id="Introduction" name="Introduction">簡介</h5> +<ul> <li><a href="/zh_tw/SVG/教學/簡介" title="zh tw/SVG/教學/簡介">簡介</a></li> <li><a href="/zh_tw/SVG/教學/起步" title="zh_tw/SVG/教學/起步">起步</a></li> <li>在此增加其他內容</li> <li><a href="/zh_tw/SVG/教學/其他教學" title="zh_tw/SVG/教學/其他教學">其他教學</a></li> +</ul> + +<p>{{ languages( { "en": "en/SVG/Tutorial", "fr": "fr/SVG/Tutoriel", "ja": "ja/SVG/Tutorial", "pl": "pl/SVG/Przewodnik" } ) }}</p> |