提起物件導向我們就能想到類,對象,封裝,繼承,多態。在《javaScript高級程式設計》(人民郵電出版社,曹力、張欣譯。英文名字是:Professional JavaScript for Web Developers)這本書中描述的還算比較詳細。我們來看看JavaScript中定義類別的各種方法。
1.工廠方式
javaScript中建立自己的類別和對象,我們應該是必須掌握的,我們都知道javaScript中物件的屬性可以在物件建立後動態定義,例如下面的程式碼:
程式碼如下:
Car car=new Car();
使用new 關鍵字已經深入人心,因此我們使用上面的方法去定義總感覺彆扭,並且每次調用時都去創建新的屬性以及函數,功能上也不實際。下來我們看看建構函數的形式定義類別。
2.建構子
這種方式看起來有點象工廠函數。具體表現如下:
this.color = color;
= function() {
alert(this.color);
};
}
var car2 = new Car("blue ", 4);
car1.showColor();
car2.showColor();
看起來效果很明顯,有差別了吧。感覺有點意思了。在建構函式內部創造物件使用this 關鍵字,使用new 運算子建立物件感覺非常親切。但也有點問題:每次new 物件時都會創建所有的屬性,包括函數的創建,也就是說多個物件完全獨立,我們定義類別的目的就是為了共享方法以及數據,但是car1物件與car2物件都是各自獨立的屬性與函數,最起碼我們應該共享方法。這就是原形方式的優勢所在。
3.原型方式
利用物件的prototype屬性,可把它看出建立新物件所依賴的原型。方法如下:
複製代碼
代碼如下:
}
4);
var car2=new Car('blue',4);
car1.showColor();
car2.showColor();
car2.showColor();
car2.showColor();
drivers);
car1.drivers.push("stephen");
alert(car1.drivers); //結果:Tom,Jerry,stephen
alert(car2.drivers); //結果: Tom,Jerry
alert(car1 instanceof Car);
此方法是把屬性放在內部定義,把方法放在外邊利用prototype來定義。解決了第三種方法的問題。
這種方法其實應該來說非常友好了,但是比起java的語法來,應該有一些不和諧,感覺比較凌亂,對C 來說,我們就沒有那麼麻煩的感覺了,可是開發C 的研發人員一般情況下很少涉及javaScript,而對J2EE的研發人員來說,這種方式總是有些彆扭。總感覺不是友善的封裝,其實只不過是視覺上封裝效果不是很好而已,要想達到視覺封裝效果而又能達到這種方法的效果的也可以以,個人認為其實比較麻煩。那就是動態原型法。
5.動態原型
對於習慣使用其他語言的開發者來說,使用混合的構造函數/原型方式感覺不那麼和諧。畢竟,定義類別時,大多數物件導向語言都對屬性和方法進行了視覺上的封裝。考慮下面的C#類別:
class Carclass Carclass
{
public string color = "red";
public int doors = 4;
public int mpg = 23;
public Car(string color, int doors, int mpg) //constructor
{
的 this.mpg = mpg;
}
public void showColor() //method
{
#很好的打包了Car類別的所有屬性和方法,因此看見這段程式碼就知道它要實現什麼功能,它定義了一個物件的資訊。批評混合的建構子/原型方式的人認為,在建構函式記憶體找屬性,在其外部找方法的做法不合邏輯。因此,他們設計了動態原型方法,以提供更友善的編碼風格。
動態原型方法的基本想法與混合的建構子/原型方式相同,即在建構子內定義非函數屬性,而函數屬性則利用原型屬性定義。唯一的區別是賦予物件方法的位置。下面是用動態原型方法重寫的Car類:
複製代碼
代碼如下:
//最後定義
Car._initialized = true;
直到檢查typeof Car._initialized是否等於"undefined"之前,這個建構子都未改變。這行程式碼是動態原型方法中最重要的部分。如果這個值未定義,建構函式會用原型方式繼續定義物件的方法,然後把Car._initialized設為true。如果這個值定義了(當它的值為true時,typeof的值為Boolean),那就不再建立該方法。簡而言之,該方法使用標誌(_initialized)來判斷是否已給了原型任何方法。這個方法只創建並賦值一次,為取悅傳統的OOP開發者,這段程式碼看起來更像其他語言中的類別定義了。
6 混合工廠方式
這種方式通常是在無法應用前一種方式時的變通方法。它的目的是創建假建構函數,只傳回另一種物件的新實例。這段程式碼看來與工廠函數很相似:
var oTempCar = new Object();
🎜> oTempCar.mpg=23;
oTempCar.showColor = function() {
alert(this.color);
}
與經典方式不同,以這種方式使用new運算符,使它看起來像真正的建構子:
var oCar = new Car();
由於在Car()建構函式內部呼叫了new運算符,所以將忽略第二個new運算子(位於建構函式之外)。在建構函式內部建立的物件被傳遞回變數var。這種方式在物件方法的內部管理上與經典方式有著相同的問題。強烈建議:除非萬不得已(請參閱第15章),還是避免使用這種方式。
總結:(採用哪種方式)
目前使用最廣泛的是混合的建構子/原型方式。此外,動態原型方法也很流行,在功能上與建構函數/原型方式等價。可以採用這兩種方式中的任何一種。不過不要單獨使用經典的建構子或原型方式,因為這樣會為程式碼引入問題。
複製程式碼
this.Get = function(carid) {
}
//static class (2:json)
var Car = {
color: 'red',
doors: 4, Car.showColor();

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

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