js es6系列教程 - 新的類語法實戰(zhàn)選項卡(詳解)
其實es6的面向?qū)ο蠛芏嘣砗蜋C制還是ES5的,只不過把語法改成類似php和java老牌后端語言中的面向?qū)ο笳Z法.
一、用es6封裝一個基本的類
class Person{
constructor( uName ){
this.userName = uName;
}
sayName(){
return this.userName;
}
}
是不是很向php和java中的類, 其實本質(zhì)還是原型鏈,我們往下看就知道了
首先說下語法規(guī)則:
class Person中的Person就是類名,可以自定義
constructor就是構(gòu)造函數(shù),這個是關(guān)鍵字,當(dāng)實例化對象的時候,這個構(gòu)造函數(shù)會被自動調(diào)用
let oP = new Person( 'ghostwu' ); console.log( oP.sayName() ); //ghostwu console.log( oP instanceof Person ); //true console.log( oP instanceof Object ); //true console.log( typeof Person ); //function console.log( typeof Person.prototype.sayName ); //function console.log( oP.__proto__ === Person.prototype ); //true console.log( 'sayName' in oP ); //true console.log( Person.prototype );
第1行和第2行實例化和調(diào)用方法還是跟es5一樣
第4行和第5行判斷對象是否是類(Person)和Object的實例, 結(jié)果跟es5一樣, 這個時候,我們肯定會想到Person的本質(zhì)是否就是一個函數(shù)呢
第7行完全驗證了我們的想法,類Person本質(zhì)就是一個函數(shù)
第8行可以看到sayName這個函數(shù)其實還是加在Person的原型對象上
第9行還是驗證了es5的原型鏈特點:對象的隱式原型指向構(gòu)造函數(shù)的原型對象
第10行驗證oP對象通過原型鏈查找到sayName方法
這種類的語法,被叫做語法糖,本質(zhì)還是原型鏈
二、利用基本的類用法,封裝一個加法運算
class Operator{
constructor( n1 = 1, n2 = 2 ){
this.num1 = n1;
this.num2 = n2;
}
add( n1 = 10, n2 = 20 ){
let num1 = n1 || this.num1, num2 = n2 || this.num2;
return num1 + num2;
}
}
var oper = new Operator();
console.log( oper.add( 100, 200 ) );
三、利用基本的類語法,封裝經(jīng)典的選項卡
css代碼:
#tab div {
width: 200px;
height: 200px;
border: 1px solid #000;
display: none;
}
#tab div:nth-of-type(1) {
display: block;
}
.active {
background: yellow;
}
html代碼:
<div id="tab"> <input type="button" value="點我1" data-target="#div1" class="active"> <input type="button" value="點我2" data-target="#div2"> <input type="button" value="點我3" data-target="#div3"> <input type="button" value="點我4" data-target="#div4"> <div id="div1">1</div> <div id="div2">2</div> <div id="div3">3</div> <div id="div4">4</div> </div>
javascript代碼:
window.onload = () => {
class Tab {
constructor( context ) {
let cxt = context || document;
this.aInput = cxt.querySelectorAll( "input" );
this.aDiv = cxt.querySelectorAll( "div" );
}
bindEvent(){
let targetId = null;
this.aInput.forEach(( ele, index )=>{
ele.addEventListener( "click", ()=>{
targetId = ele.dataset.target;
this.switchTab( ele, targetId );
});
});
}
switchTab( curBtn, curId ){
let oDiv = document.querySelector( curId );
this.aDiv.forEach(( ele, index )=>{
ele.style.display = 'none';
this.aInput[index].className = '';
});
curBtn.className = 'active';
oDiv.style.display = 'block';
}
}
new Tab( document.querySelector( "#tab" ) ).bindEvent();
}
以上這篇js es6系列教程 - 新的類語法實戰(zhàn)選項卡(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 溫習(xí)Javascript基礎(chǔ)語法之詞法結(jié)構(gòu)
- JavaScript語法約定和程序調(diào)試原理解析
- javascript中正則表達式語法詳解
- javascript 高級語法之繼承的基本使用方法示例
- 詳解JavaScript 新語法之Class 的私有屬性與私有方法
- JSON基本語法及與JavaScript的異同實例分析
- NodeJS模塊與ES6模塊系統(tǒng)語法及注意點詳解
- JavaScript ES6中的簡寫語法總結(jié)與使用技巧
- 關(guān)于javascript事件響應(yīng)的基礎(chǔ)語法總結(jié)(必看篇)
- 深入理解JavaScript中的語法和代碼結(jié)構(gòu)
相關(guān)文章
layui使用及簡單的三級聯(lián)動實現(xiàn)教程
這篇文章主要給大家介紹了關(guān)于layui使用及簡單的三級聯(lián)動的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
10個必備的JavaScript?async/await工具函數(shù)分享
當(dāng)談到異步編程時,async/await是JavaScript中常用的功能之一,本文為大家整理了10個常用的await和async函數(shù)示例,感興趣的小伙伴可以參考一下2023-12-12
基于Particles.js制作超炫粒子動態(tài)背景效果(仿知乎)
本文給大家分享Particles.js基于Canvas畫布創(chuàng)建粒子顆粒效果,代碼非常簡單,需要的朋友參考下吧2017-09-09
文本框只能輸入數(shù)字的實現(xiàn)方法(兼容IE火狐)
下面小編就為大家?guī)硪黄谋究蛑荒茌斎霐?shù)字的實現(xiàn)方法(兼容IE火狐)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
JavaScript定義函數(shù)的三種實現(xiàn)方法
這篇文章主要介紹了JavaScript定義函數(shù)的三種實現(xiàn)方法的相關(guān)資料,希望通過本文大家能夠掌握三種定義函數(shù)的方法,需要的朋友可以參考下2017-09-09
window.addEventListener來解決讓一個js事件執(zhí)行多個函數(shù)
可能你也碰到過這種情況,就是在js的代碼中用了window.onload后,可能會影響到body中的onload事件。這時就要用window.attachEvent和window.addEventListener來解決一下,需要的朋友可以參考下2012-12-12

