[js高手之路] es6系列教程 - 新的類語法實戰選項卡

来源:http://www.cnblogs.com/ghostwu/archive/2017/09/01/7465066.html
-Advertisement-
Play Games

其實es6的面向對象很多原理和機制還是ES5的,只不過把語法改成類似php和java老牌後端語言中的面向對象語法. 一、用es6封裝一個基本的類 是不是很向php和java中的類, 其實本質還是原型鏈,我們往下看就知道了 首先說下語法規則: class Person中的Person就是類名,可以自定 ...


其實es6的面向對象很多原理和機制還是ES5的,只不過把語法改成類似php和java老牌後端語言中的面向對象語法.

一、用es6封裝一個基本的類

1         class Person{
2             constructor( uName ){
3                 this.userName = uName;
4             }
5             sayName(){
6                 return this.userName;
7             }
8         }

是不是很向php和java中的類, 其實本質還是原型鏈,我們往下看就知道了

首先說下語法規則:

class Person中的Person就是類名,可以自定義

constructor就是構造函數,這個是關鍵字,當實例化對象的時候,這個構造函數會被自動調用

 1         let oP = new Person( 'ghostwu' );
 2         console.log( oP.sayName() ); //ghostwu
 3 
 4         console.log( oP instanceof Person ); //true
 5         console.log( oP instanceof Object ); //true
 6  
 7         console.log( typeof Person ); //function
 8         console.log( typeof Person.prototype.sayName ); //function
 9         console.log( oP.__proto__ === Person.prototype ); //true

10         console.log( 'sayName' in oP ); //true 
11         console.log( Person.prototype );

第1行和第2行實例化和調用方法還是跟es5一樣

第4行和第5行判斷對象是否是類(Person)和Object的實例, 結果跟es5一樣, 這個時候,我們肯定會想到Person的本質是否就是一個函數呢

第7行完全驗證了我們的想法,類Person本質就是一個函數

第8行可以看到sayName這個函數其實還是加在Person的原型對象上

第9行還是驗證了es5的原型鏈特點:對象的隱式原型指向構造函數的原型對象

第10行驗證oP對象通過原型鏈查找到sayName方法

這種類的語法,被叫做語法糖,本質還是原型鏈

二、利用基本的類用法,封裝一個加法運算

 1         class Operator{
 2             constructor( n1 = 1, n2 = 2 ){
 3                 this.num1 = n1;
 4                 this.num2 = n2;
 5             }
 6             add( n1 = 10, n2 = 20 ){
 7                 let num1 = n1 || this.num1, num2 = n2 || this.num2;
 8                 return num1 + num2;
 9             }
10         }
11         var oper = new Operator();
12         console.log( oper.add( 100, 200 ) );

三、利用基本的類語法,封裝經典的選項卡

css代碼:

 1      #tab div {
 2             width: 200px;
 3             height: 200px;
 4             border: 1px solid #000;
 5             display: none;
 6         }
 7 
 8         #tab div:nth-of-type(1) {
 9             display: block;
10         }
11 
12         .active {
13             background: yellow;
14         }

html代碼:

 1 <div id="tab">
 2         <input type="button" value="點我1" data-target="#div1" class="active">
 3         <input type="button" value="點我2" data-target="#div2">
 4         <input type="button" value="點我3" data-target="#div3">
 5         <input type="button" value="點我4" data-target="#div4">
 6         <div id="div1">1</div>
 7         <div id="div2">2</div>
 8         <div id="div3">3</div>
 9         <div id="div4">4</div>
10     </div>

javascript代碼:

 1         window.onload = () => {
 2             class Tab {
 3                 constructor( context ) {
 4                     let cxt = context || document;
 5                     this.aInput = cxt.querySelectorAll( "input" );
 6                     this.aDiv = cxt.querySelectorAll( "div" );
 7                 }
 8                 bindEvent(){
 9                     let targetId = null;
10                     this.aInput.forEach(( ele, index )=>{
11                         ele.addEventListener( "click", ()=>{
12                             targetId = ele.dataset.target;
13                             this.switchTab( ele, targetId );
14                         });
15                     });
16                 }
17                 switchTab( curBtn, curId ){
18                     let oDiv = document.querySelector( curId );
19                     this.aDiv.forEach(( ele, index )=>{
20                         ele.style.display = 'none';
21                         this.aInput[index].className = '';
22                     });
23                     curBtn.className = 'active';
24                     oDiv.style.display = 'block';
25                 }
26             }
27             new Tab( document.querySelector( "#tab" ) ).bindEvent();
28         }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 函數節流與函數防抖 最近由於處於互聯網大廠的秋招季節,因此這些天都在看前端性能優化和演算法方面的知識。在性能優化方面,看了網上的一些文章,同時看完了《高性能網站建設指南》和《高性能JavaScript》兩本書,頗有收穫,可以參看這篇文章,主要是一些前端性能優化方面的總結。傳送門: "前端性能優化最佳實 ...
  • js獲取url的參數和值的N種有效方法 ...
  • /**數據驗證完整性**/$.fn.Validform = function () { var Validatemsg = ""; var Validateflag = true; $(this).find("[isvalid=yes]").each(function () { var checke ...
  • 1、申請開通cnblogs的JS代碼支持 2、將微信收款碼圖片上傳到cnblogs 3、將如下代碼中的http://files.cnblogs.com/files/eritpang/weixin.bmp替換為剛剛上傳的收款碼圖片的鏈接地址,然後將代碼添加到設置->博客側邊欄公告(支持HTML代碼)( ...
  • 鑒別空對象看齊能否進行屬性操作。 雙等會進行隱式類型轉換,==兩側數據類型不一樣時,會轉換成一樣的在進行比較。 1 若等號一側為 布爾值 就都轉換成布爾值進行比較。 NaN和任何內容比較結果都為false onchange檢測內容(在表單中):1 在單選和覆選框中,檢測checked值是否發生變化( ...
  • 之前用模板渲染都是用angular,無意間發現了jquery tmpl這種輕量級,其文檔在這裡 官方解釋對該插件的說明:將匹配的第一個元素作為模板,render指定的數據,簽名如下: 其中參數data的用途很明顯:用於render的數據,可以是任意js類型,包括數組和對象。options一般情況下都 ...
  • es5的構造函數前面如果不用new調用,this指向window,對象的屬性就得不到值了,所以以前我們都要在構造函數中通過判斷this是否使用了new關鍵字來確保普通的函數調用方式都能讓對象複製到屬性 在es6中,為了識別函數調用時,是否使用了new關鍵字,引入了一個新的屬性new.target: ...
  • "Eruda" 是一個專為手機網頁前端設計的調試面板,類似 DevTools 的迷你版,其主要功能包括: 捕獲 console 日誌 檢查元素狀態 顯示性能指標 捕獲XHR請求 顯示本地存儲和 Cookie 信息 瀏覽器特性檢測等等。 效果如圖 前端小白寫js函數時,在沒查資料的情況下,是這樣子寫的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...