javascript創建一個物件的方法:1、使用new關鍵字呼叫建構器創建物件;2、利用工廠方法創建物件;3、利用建構函式方法創建物件;4、利用原型方法創建物件; 5.利用混合的建構子/原型方式創建物件;6、利用動態原型方法創建物件。
本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
我們可以利用JavaScript的語法特徵,以類別的想法建立物件。
方法一:原始方法--使用new關鍵字呼叫建構器建立物件
程式碼如下:
<script> var obj = new Object(); obj.name = "Kitty";//为对象增加属性 obj.age = 21; obj.showName = function () {//为对象添加方法 console.log(this.name); }; obj.showAge = function(){ console.log(this.age); }; obj.showName(); obj.showAge(); </script>
這種方法透過new關鍵字產生一個對象,然後根據JavaScript是動態語言的特性來添加屬性和方法,構造一個對象。其中的this表示呼叫該方法的物件。
這種方法的問題在於:如果我們需要多次建立對象,那麼就需要重複程式碼多次,不利於程式碼的重複使用。
方法二:工廠方法
#程式碼如下:
<script> function createObj(){ var obj = new Object();//创建对象 obj.name = "Kitty"; obj.age = "21"; obj.showName = function () { console.log(this.name); }; obj.showAge = function () { console.log(this.age); }; return obj; } var obj1 = createObj(); var obj2 = createObj(); obj1.showName(); obj1.showAge(); obj2.showName(); obj2.showAge(); </script>
這種方法雖然也實現了創建對象,但是同樣地,如果需要多次創建對象,而且屬性內容不一樣的話,也是需要重複代碼多遍。需要重新考慮程式碼重用率,接下來修改程式碼,使其可以提高程式碼重複率,而且可以改變工廠方法,傳入參數賦值。
改進程式碼如下:
<script> function createObj(name,age){ var obj = new Object(); obj.name = name; obj.age = age; obj.showName = function () { console.log(this.name); }; obj.showAge = function(){ console.log(this.age); }; return obj; } var obj1 = new createObj("Kitty","21"); var obj2 = new createObj("Luo","22"); obj1.showName();//Kitty obj1.showAge();//21 obj2.showName();//luo obj2.showAge();//22 </script>
此方法雖然可以提高程式碼的重複使用率,但和物件導向中類別的概念相比,有一個很大的缺陷。物件導向強調物件的屬性私有,但物件的方法是共享。而上面的工廠方法在建立物件時,要為每個物件建立各自私有的方法。同時,由於為每個物件創建邏輯相同的方法,所以很浪費記憶體。
改進程式碼如下:
<script> function createObj(name,age){ var obj = new Object(); obj.name = name; obj.age = age; obj.showName = showName; obj.showAge = showAge; return obj; } function showName(){ console.log(this.name); } function showAge(){ console.log(this.age); } var obj1 = new createObj("Kitty","21"); var obj2 = new createObj("Luo","22"); obj1.showName();//Kitty obj1.showAge();//21 obj2.showName();//luo obj2.showAge();//22 </script>
上面透過定義幾個函數對象,解決了不同物件持有函數物件的私有問題。現在所有物件的方法都持有上面兩個函數的參考。但是這麼一來,物件的函數和物件又相互獨立,這和物件導向中特定方法屬於特定類別的思想不符合。
方法三:建構子方法
#程式碼如下:
<script> function Person(name,age){ this.name = name; this.age = age; this.showName = function () { console.log(this.name); }; this.showAge = function () { console.log(this.age); }; } var obj1 = new Person("Kitty","21"); var obj2 = new Person("Luo","22"); obj1.showName();//Kitty obj1.showAge();//21 obj2.showName();//luo obj2.showAge();//22 </script>
建構函數的方法和工廠方法一樣,會為每個物件創造獨享的函數物件。當然也可以將這些函數物件定義在建構函式外面,有了物件和方法相互獨立的問題。
使用建構子存在的最大問題就是每個實例都會將所有的屬性建立一次。這個對於數值屬性來說可以接受,但是如果函數方法每個實例都要創建一遍,則不合理。
若要建立Person()的新實例,必須使用new運算元。以這種方式呼叫建構函式其實會經歷以下四個步驟:
#- 创建一个新对象;
- 将构造函数的作用域赋给新对象(因此this就指向了这个新对象);
- 执行构造函数中的代码(为这个新对象添加属性);
- 返回新对象。
方法四:原型方法
代码如下:
<script> function Person(){} //定义一个空构造函数,且不能传递参数 //将所有的属性的方法都赋予prototype Person.prototype.name = "Kitty"; Person.prototype.age = 21; Person.prototype.showName = function (){ console.log(this.name); }; Person.prototype.showAge = function (){ console.log(this.age); }; var obj1 = new Person("Kitty","21"); var obj2 = new Person("Luo","22"); obj1.showName();//Kitty obj1.showAge();//21 obj2.showName();//luo obj2.showAge();//22 </script>
当生成Person对象时,prototype的属性都赋给了新的对象。那么属性和方法是共享的。首先,该方法的问题是构造函数不能传递参数,每个新生成的对象都有默认值。其次,方法共享没有任何问题,但是,当属性是可改变状态的对象时,属性共享就有问题。
修改代码如下:
<script> function Person(){} //定义一个空构造函数,且不能传递参数 //将所有的属性的方法都赋予prototype Person.prototype.age = 21; Person.prototype.array = new Array("Kitty","luo"); Person.prototype.showAge = function (){ console.log(this.age); }; Person.prototype.showArray = function (){ console.log(this.array); }; var obj1 = new Person(); var obj2 = new Person(); obj1.array.push("Wendy");//向obj1的array属性添加一个元素 obj1.showArray();//Kitty,luo,Wendy obj2.showArray();//Kitty,luo,Wendy </script>
上面的代码通过obj1的属性array添加元素时,obj2的array属性的元素也跟着受到影响,原因就在于obj1和obj2对象的array属性引用的是同一个Array对象,那么改变这个Array对象,另一引用该Array对象的属性自然也会受到影响,混合的构造函数/原型方式使用构造函数定义对象的属性,使用原型方法定义对象的方法,这样就可以做到属性私有,而方法共享。
方法五:混合的构造函数/原型方式
代码如下:
<script> function Person(name,age){ this.name = name; this.age = age; this.array = new Array("Kitty","luo"); } Person.prototype.showName = function (){ console.log(this.name); }; Person.prototype.showArray = function (){ console.log(this.array); }; var obj1 = new Person("Kitty",21); var obj2 = new Person("luo",22); obj1.array.push("Wendy");//向obj1的array属性添加一个元素 obj1.showArray();//Kitty,luo,Wendy obj1.showName();//Kitty obj2.showArray();//Kitty,luo obj2.showName();//luo </script>
属性私有后,改变各自的属性不会影响别的对象。同时,方法也是由各个对象共享的。在语义上,这符合了面向对象编程的要求。
方法六:动态原型方法
代码如下:
<script> function Person(name,age){ this.name = name; this.age = age; this.array = new Array("Kitty","luo"); //如果Person对象中_initialized 为undefined,表明还没有为Person的原型添加方法 if(typeof Person._initialized == "undefined"){ Person.prototype.showName = function () { console.log(this.name); }; Person.prototype.showArray = function () { console.log(this.array); }; Person._initialized = true; } } var obj1 = new Person("Kitty",21); var obj2 = new Person("luo",22); obj1.array.push("Wendy");//向obj1的array属性添加一个元素 obj1.showArray();//Kitty,luo,Wendy obj1.showName();//Kitty obj2.showArray();//Kitty,luo obj2.showName();//luo </script>
这种方法和构造函数/原型方式大同小异。只是将方法的添加放到了构造函数之中,同时在构造函数Person上添加了一个属性用来保证if语句只能成功执行一次,在实际应用中,采用最广泛的构造函数/原型方法。动态原型方法也很流行,它在功能上和构造函数/原型方法是等价的。不要单独使用构造函数和原型方法。
更多编程相关知识,请访问:编程视频!!
以上是javascript如何建立一個物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

從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庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

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

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中