视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
js es6系列教程 - 新的类语法实战选项卡(详解)
2020-11-27 22:31:08 责编:小采
文档

其实es6的面向对象很多原理和机制还是ES5的,只不过把语法改成类似php和java老牌后端语言中的面向对象语法.

一、用es6封装一个基本的类

class Person{
 constructor( uName ){
 this.userName = uName;
 }
 sayName(){
 return this.userName;
 }
 }

是不是很向php和java中的类, 其实本质还是原型链,我们往下看就知道了

首先说下语法规则:

class Person中的Person就是类名,可以自定义

constructor就是构造函数,这个是关键字,当实例化对象的时候,这个构造函数会被自动调用

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行实例化和调用方法还是跟es5一样

第4行和第5行判断对象是否是类(Person)和Object的实例, 结果跟es5一样, 这个时候,我们肯定会想到Person的本质是否就是一个函数呢

第7行完全验证了我们的想法,类Person本质就是一个函数

第8行可以看到sayName这个函数其实还是加在Person的原型对象上

第9行还是验证了es5的原型链特点:对象的隐式原型指向构造函数的原型对象

第10行验证oP对象通过原型链查找到sayName方法

这种类的语法,被叫做语法糖,本质还是原型链

二、利用基本的类用法,封装一个加法运算

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 ) );

三、利用基本的类语法,封装经典的选项卡

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系列教程 - 新的类语法实战选项卡(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

下载本文
显示全文
专题