js es6系列教程 - 新的類語法實戰(zhàn)選項卡(詳解)
其實es6的面向對象很多原理和機制還是ES5的,只不過把語法改成類似php和java老牌后端語言中的面向對象語法.
一、用es6封裝一個基本的類
class Person{
constructor( uName ){
this.userName = uName;
}
sayName(){
return this.userName;
}
}
是不是很向php和java中的類, 其實本質(zhì)還是原型鏈,我們往下看就知道了
首先說下語法規(guī)則:
class Person中的Person就是類名,可以自定義
constructor就是構造函數(shù),這個是關鍵字,當實例化對象的時候,這個構造函數(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的實例, 結果跟es5一樣, 這個時候,我們肯定會想到Person的本質(zhì)是否就是一個函數(shù)呢
第7行完全驗證了我們的想法,類Person本質(zhì)就是一個函數(shù)
第8行可以看到sayName這個函數(shù)其實還是加在Person的原型對象上
第9行還是驗證了es5的原型鏈特點:對象的隱式原型指向構造函數(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)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Bootstrap 網(wǎng)站實例之單頁營銷網(wǎng)站
這篇文章主要介紹了Bootstrap 網(wǎng)站實例之單頁營銷網(wǎng)站的相關資料,本文給大家介紹的非常詳細具有一定的參考借鑒價值,需要的朋友可以參考下2016-10-10
微信小程序中的canvas 文字斷行和省略號顯示功能的處理方法
大家都知道在canvas中沒有提供方法來處理文字的多行問題,只有通過截取指定字符串來達到目的。接下來通過本文給大家介紹微信小程序中的canvas 文字斷行和省略號顯示功能 ,需要的朋友可以參考下2018-11-11

