JavaScript之自訂類型
在JavaScript中,建立一個具有自訂屬性和方法的物件有很多種模式,下面一一進行介紹。
1、直接建立模式。這是最簡單也是最直接的模式,首先建立一個引用類型的對象,然後為其新增自訂屬性和方法。範例程式碼如下:
1 var person = new Object();
2 person.name = "Sam";
3 person.age = 16;
4 person.speak = function(){
5 alert(this. name + "is " + this.age + "years old");
6 }
7 person.speak();
可以看到,上面創建了一個Object類型的對象,然後為其添加了name和age屬性以及一個speak方法。直接建立模式雖然簡單,但其缺點是顯而易見的:當我們需要建立許多相同的物件時,每次都要重複編寫程式碼。為了解決這個問題,我們可以將創建物件的過程進行封裝,於是便有了下面的工廠模式。
2、工廠模式。工廠模式是程式設計中常用的設計模式,它主要是將創建物件的流程進行了封裝,範例程式碼如下:
1 function createPerson(name, age){
2 var person = new Object() ;
3 person.name = name;
4 person.age = age;
5 person.speak = function(){
6 alert(this.name + "is " + this.age + "yyears old");🎟 7 }
8 return person;
9 }
10 var person1 = createPerson("Sam", 16);
11 var person2 = createPerson("Jack", 18);
3、建構函數模式。構造函數和普通函數沒有任何區別。任何普通函數都可以當作建構函數,只要使用new運算元即可;任何建構函數也都可以當作普通函數來呼叫。只不過在JavaScript中,有一個約定,就是用來作為建構函數的函數名稱需要一個首字母大寫。範例程式碼如下:
1 function Person(name, age){
2 this.name = name;
3 this.age = age;
4 this.speak = function(){
5 "is " + this.age + "years old");
6 }
7 }
8 var person1 = new Person("Sam", 16);
9 var person2 = new Person("Jack", 18);
解決這個缺點的一個比較簡單的方法就是將函數的聲明放到構造函數的外面,即:
1 function name, age){
2 this.name = name;
3 this.age = age;
4 this.speak = speak;
5 }
6 + this.age + "years old");
8 }
9 var person1 = new Person("Sam", 16);
10 var person2 = new Person("Jack", 18);
11 alert(person1. speak == person2.speak); // true
問題解決了,但這種方法又帶來了新的問題。首先,函數speak是在全域作用域中宣告的,但它卻只能被用於Person建構函數,放在全域作用域中有被誤用的風險;其次,如果一個自訂型別有很多的方法,則需要宣告很多的全域函數,這不僅會導致全域作用域的污染,也不利於程式碼的封裝。那麼,有沒有辦法能讓自訂類型的方法成為與類別綁定的,又不污染全域作用域呢?答案是使用原型模式。
4、原型模式。在我們宣告一個新的函數後,該函數(在JavaScript中,函數也是物件)就會擁有一個prototype的屬性。 prototype是一個對象,表示會被該函數所建立的所有物件擁有的公共屬性和方法。範例程式碼如下:
1 function Person(){}
2 Person.prototype.name="Sam";
3 Person.prototype.age=16;
4 Person.prototype.speak = function(5){5 alert(this.name + "is " + this.age + "years old");
6 }
7 var person1 = new Person();
8 person1.speak();
9 var person2 = new Person() ;
10 alert(person1.speak == person2.speak); // true
5、組合模式。範例程式碼如下:
1 function Person(name, age){
2 this.name = name;
3 this.age = age;
4 }
5 Person.prototype。 (this.name + "is " + this.age + "years old");
7 }
8 var person1 = new Person();
9 person1.speak();
10 var person2 = new Person();
11 alert(person1.speak == person2.speak); // true
不難發現,組合模式實現了我們所有的需求,這也是目前應用得比較廣泛的一種模式。有物件導向程式設計經驗的開發人員可能會覺得將prototype的聲明放在建構函式外面有點彆扭,那麼能否將其放到建構函式裡去呢?答案是肯定的,使用動態組合模式即可。
2 this.name = name;
3 this.age = age;
4 if (Person.prototype.speak == "undefined"{
Person.prototype.speak = function(){
6 alert(this.name + "is " + this.age + "years old");
7 }
8 }
9 }

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
