Javascript中存在「類別」麼?
萬物皆物件
Javascript中除了基本資料(Undefined、Null、Boolean、Number、String),其他都是物件(Object)。
實際上,Javascript中的物件是資料與功能的集合。例如我們知道:
var foo = new Function("alert ('hello world!')");
foo();
可見foo是個函數,也是一種物件。再比如說:
{ //do something
}
foo.data = 123;
foo["data2"] = "hello";
alert(foo.data);
alert(foo.data2);
物件的建構 一般我們用建構子來建構對象,但如果沒有建構函數,我們也有辦法建構我們想要的物件:
return {
freturn { sex: __sex,
age: __age,
get: function(__key){
alert(this[__key]);
}
};
}
}
}
}; >
var Bob = creatPerson("Bob", "male", 18);
Bob.get("name"); //Bob
Bob.get("sex"); //male
Bob.get("age"); //18
但這不夠,我希望方法是可以共享的。例如我再用該函數創建一個Tom對象,get函數就又被創建了一次,這明顯地浪費了我的記憶體。 導入共享資源
因為我們知道函數也是對象,所以我們可以把需要共享的方法或屬性放在他「身上」: 程式碼如下:
function creatPerson(__name, __sex, __age){
var commoncal = guments. ;
return {
//自身的屬性
name: __name,
sex: __sex,
age: __age,
//自身的方法
sayhi: function( ){alert("hi");},
//共享的方法
get: common.get,
getType: common.getType,
//共享的屬性
type: common.type
};
}
creatPerson.common = {
get:function(__key){
alert(this[__key]);
},
getType : function(){
alert(this.type);
},
type: "Person"
};
var Bob = creatPerson("Bob", "male ", 18);
Bob.get("name"); //Bob
Bob.get("sex"); //male
Bob.getType(); //Person
於是我們就用蹩腳的方法,成功的創建了一個擁有自有屬性方法和共享屬性方法的物件。但實際上,Javascript就是這麼蹩腳地創造物件的。
其實共享屬性沒有真正實現,因為這個共享屬性,依然只是副本。這並不是我們真正希望的共享屬性。
new關鍵字
和上面的「物件的建構」相同,new的目的是建立物件的自有屬性和方法。例如: 程式碼如下:
function Person(name, __sex,__name, __age)
this.name = __name;
this.sex = __sex;
this.age = __age;
this.get = function(__key){
alert(this[__key]);
};
}
var Bob = new Person("Bob", "male", 18);
Bob.get("name"); //Bob
Bob.get("sex"); //male
Bob.get("age"); //18
原型(Prototype)
Javascript的作者用了和上面「導入共享資源」的方法差不多。既然函數也是對象,那麼把需要分享的「東東」放在他「身上」吧: 程式碼如下:
function Person(__name, __sex, __age){
this.name = __name;
this.sex = __sex;
this.age = __age;
this.sayhi = function(__key){
alert("hi");
};
}
Person.prototype = {
constructor: Person,
get: function( __key){
alert(this[__key]);
}
};
var Bob = new Person("Bob", "male", 18);
Bob .get("name"); //Bob
Bob.get("sex"); //male
alert(Bob.constructor); //function Person
Javascript創建物件的模型是簡潔的,new來處理自身問題,prototype來處理共享問題。
如果說Java的物件(實例)產生方式是將原料丟到模子裡(類)熔煉而成;那麼Javascript的物件產生方式就是給材料給建築工(構造函數)讓他按圖紙搭建而成。
實際流程
當然實際流程並不是這樣的,新建一個物件先做的是處理共享資源,例如:
function A(){
console.dir(this);
alert(this .type); //A
}
A.prototype.type = "A";
var a = new A();
透過console.dir將a印出來我們可以看到:
type | "A" |
__proto__ | A {type = "A"} |
type | "A" |
constructor | A() |
建構函式新建一個物件以後,立刻將其prototype的引用賦給新建物件的內部屬性__proto__,然後再執行建構函式裡面的建構語句。
並沒有覆蓋
}
A.prototype.type = "A";
var a = new A();
alert(a. type); //B
__proto__並不是標準的,例如IE上沒有,但IE上也有類似的內部屬性,但我們也無法使用它。
基於這個原因,我們刪除a.type時依然可以回傳a.type:
程式碼如下:
function A(){
this.type = "B"
}
A.prototype.type = "A";
var a = new A();
alert(a.type); //B
alert(a.type); //A
到底有沒有類?
嚴格地講,Javascript並沒有類別(class)這種東西。
但有時我們會用構造函數的名字作為利用該構造函數創建的對象們的“類型(type not class)名”,以方便我們用Javascript進行面向對象編程時的交流。 名字只是一個代號,一個方便理解的工具罷了。
參考文獻
Javascript繼承機制的設計思想

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

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靈活,廣泛用於前端和服務器端編程。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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

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