javascript如何實現類的功能
在ES6之前的版本是沒有class類的。
但是javascript程式設計方式非常的靈活,儘管沒有class類的定義,不過依然能夠實現物件導向的程式設計方式。
一.定義類並建立類的例項物件:
我們可以通過function函式來實現類:
[JavaScript] 純文字檢視 複製程式碼function Shape() { var x = 1; var y = 2; }
上面是一個函式的宣告,但是在javascript中完全可以把它當做一個類來看待。
下面建立這個類的例項物件,程式碼如下:
[JavaScript] 純文字檢視 複製程式碼var aShape = new Shape();
二.定義公有屬性和私有屬性:
在上面的程式碼中我們建立了Shape類的物件例項,但是我們並不能訪問內部的x和y屬性:
[JavaScript] 純文字檢視 複製程式碼function Shape() { var x = 1; var y = 2; } var aShape = new Shape(); console.log(aShape.x);
上面的程式碼輸出值是undefined。我們可以認為使用var宣告的是私有屬性。
需要使用this關鍵字來定義公有的屬性,程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼function Shape(){ this.x = 1; this.y = 2; } var aShape = new Shape(); console.log(aShape.x);
上面的屬性就可以正常訪問了。
三.定義公有方法和私有方法:
在javascript中,函式是Function類的例項,Function間接繼承自Object,所以,函式也是一個物件,因此,我們可以用賦值的方法建立函式,當然,我們也可以將一個函式賦給類的一個屬性變數,那麼,這個屬性變數就可以稱為方法,因為它是一個可以執行的函式。程式碼如下:
[JavaScript] 純文字檢視 複製程式碼function Shape() { var x = 0; var y = 1; this.draw = function () { //print; }; }
在上面的程式碼中定義了一個draw,並把一個function賦給它。
下面就可以通過aShape呼叫這個函式,OOP中稱為公有方法,如:
[JavaScript] 純文字檢視 複製程式碼aShape.draw();
如果用var定義,那麼這個draw就變成私有的了,OOP中稱為私有方法,如:
[JavaScript] 純文字檢視 複製程式碼function Shape() { var x = 0; var y = 1; var draw = function () { //print; }; }
這樣就不能使用aShape.draw呼叫這個函式了。
四.建構函式:
javascript並不支援OOP,當然也就沒有建構函式了,不過,可以自己模擬一個建構函式,讓物件被建立時自動呼叫,程式碼如下:
[JavaScript] 純文字檢視 複製程式碼function Shape() { var init = function () { //建構函式程式碼 }; init(); }
在Shape的最後,我們人為的呼叫了init函式,那麼,在建立了一個Shape物件是,init總會被自動呼叫,可以模擬我們的建構函式了。
五.帶引數的建構函式:
如何讓建構函式帶引數呢?其實很簡單,將要傳入的引數寫入函式的引數列表中即可,如:
[JavaScript] 純文字檢視 複製程式碼function Shape(ax, ay) { var x = 0; var y = 0; var init = function () { //建構函式 x = ax; y = ay; }; init(); }
這樣,我們就可以這樣建立物件:
[JavaScript] 純文字檢視 複製程式碼var aShape = new Shape(0,1);
六.靜態屬性和靜態方法:
在Javascript中如何定義靜態的屬性和方法呢?如下所示:
[JavaScript] 純文字檢視 複製程式碼function Shape(ax, ay) { var x = 0; var y = 0; var init = function () { //建構函式 x = ax; y = ay; }; init(); } Shape.count = 0;//定義一個靜態屬性count,這個屬性是屬於類的,不是屬於物件的。 Shape.staticMethod = function () { };//定義一個靜態的方法
有了靜態屬性和方法,我們就可以用類名來訪問它了,如下:
[JavaScript] 純文字檢視 複製程式碼alert ( aShape.count ); aShape.staticMethod();
七.在方法中訪問本類的公有屬性和私有屬性:
在類的方法中訪問自己的屬性,Javascript對於公有屬性和私有屬性的訪問方法有所不同,請大家看下面的程式碼:
[JavaScript] 純文字檢視 複製程式碼function Shape(ax, ay) { var x = 0; var y = 0; this.gx = 0; this.gy = 0; var init = function () { x = ax;//訪問私有屬性,直接寫變數名即可 y = ay; this.gx = ax;//訪問公有屬性,需要在變數名前加上this. this.gy = ay; }; init(); }
相關文章
- 教你如何用SQLite 實現if not exist 類似功能的操作SQLite
- javascript實現的非同步功能詳解JavaScript非同步
- PostgreSQL類似OracleMERGE功能的實現SQLOracle
- JavaScript 實現sprintf 功能程式碼JavaScript
- 如何實現這樣的功能?
- HTML、CSS、JavaScript能實現的功能彙總!HTMLCSSJavaScript
- Javascript 類與靜態類的實現-js物件導向JavaScriptJS物件
- 原生JavaScript實現頁面回到頂部的功能JavaScript
- 使用 JavaScript 實現靈活的固定導航功能JavaScript
- 實現ABP中Person類的許可權功能
- 實現類似IE的列印網頁功能 (轉)網頁
- VM中實現手機震動功能的類
- JavaScript實現複製和貼上功能JavaScript
- Javascript如何實現繼承JavaScript繼承
- Javascript如何實現GPU加速?JavaScriptGPU
- SQLite中中實現 if not exist 類似功能SQLite
- python的爬蟲功能如何實現Python爬蟲
- 用JavaScript實現功能齊全的單連結串列JavaScript
- 如何實現前端錄音功能前端
- 實現類似Pinterest 的圖片預載入功能REST
- 在Asp.Net中實現類似DWR的功能ASP.NET
- Laravel 執行時類的功能擴充套件的實現Laravel套件
- JavaScript 實現(4).add(2).minus(1)功能JavaScript
- JavaScript實現類的private、protected、public、static以及繼承JavaScript繼承
- Python在類中實現swith case功能Python
- 如何實現查詢介面的所有實現類
- 實現不可變類如何禁止子類化?
- java如何實現javascript中的eval函式JavaScript函式
- vue 日程表功能如何實現???Vue
- 使用javascript 實現.net 驗證控制元件功能JavaScript控制元件
- 如何使用struts,在客戶端的jsp裡面有類似javascript的alert功能?客戶端JSJavaScript
- ES6 -> Javascript的類與繼承在Babel的實現JavaScript繼承Babel
- java中介面多個實現類,如何指定實現類,根據子類型別選擇實現方法Java型別
- JavaScript如何實現多執行緒?JavaScript執行緒
- javascript如何實現函式過載JavaScript函式
- 如何利用~ & ^ | + 及移位運算子來實現 ! 的功能
- 如何實現簡單的分散式鏈路功能?分散式
- 純JavaScript實現的呼叫裝置攝像頭並拍照的功能JavaScript