当前位置:首页 > 日记 > 正文

js es6系列教程 - 新的类语法实战选项卡 | 详解

js es6系列教程 - 新的类语法实战选项卡 | 详解

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

相关文章

详谈Ajax请求中的async:false/true

详谈Ajax请求中的async:false/true

请求,外部调用,作用,电脑软件,async,test.html<a href="javascript:void(0)" rel="external nofollow" onmouseover="testAsync()">asy.jsfunction testAsync(){ var temp; $.ajax({ async: false, //同步请求 type : "GET…

Javascript实现base64的加密解密方

Javascript实现base64的加密解密方

方法,加密解密,示例,电脑软件,Javascript,这几天使用PHP向前端传值的时候,遇到一个问题,要将代码传过去赋值。如果使用urlencode()和urldecode()函数,就会出现js无法解码的情况,因为php和js的相关函数算法不一致。于是准备使用通用的base64加密…

如何在word中竖向排列文字word中竖

如何在word中竖向排列文字word中竖

文字,竖向,排列,步骤,如何在,  或许,你去新华书店或者图书馆曾经看到过这样的书籍,文字是自上而下,自左向右或自右向左的,这种样式的版面是我们国家古代出版的书籍版式,那么下面就由小编给大家分享下在word中竖向排列文字的技巧,希望能帮助到您…

让你彻底掌握es6 Promise的八段代

让你彻底掌握es6 Promise的八段代

让你,代码,电脑软件,Promise,前言新的ES6中引入了promise的概念,目的是让回调更为优雅。层层嵌套的回调会让javascript失去美感和可读性,同时javascript也推荐采用链式的方式去书写函数调用。于是Promise就应运而生。本文将通过八段代码让大…

怎么在word中对齐自选图像在word中

怎么在word中对齐自选图像在word中

对齐,图像,步骤,方法,图形,  在word中,有时需要插入图形,当有多个图像时,手动对齐比较麻烦。下面小编教你怎样在word中对齐自选图像。word对齐图形的步骤打开需要对齐的文档,如图:word对齐图形的步骤图1  按住【ctrl】键依次选中需要对齐的…

Word中2010版进行设置文本框样式和

Word中2010版进行设置文本框样式和

设置,文本框,操作技巧,样式,颜色,  如何在Word2010中设置文本框样式和颜色。去除文本框的外边框。以及更改外边框的颜色和样式。今天,小编就教大家在Word中2010版进行设置文本框样式和颜色的操作技巧。Word中2010版进行设置文本框样式和颜…

jQuery实现文章弹出放大效果

jQuery实现文章弹出放大效果

弹出,效果,文章,电脑软件,jQuery,首先先搭写一个基本的格式:$.fn.popImg = function() { //your code goes here}然后用自调用匿名函数包裹你的代码,将系统变量以变量形式传递到插件内部,如下:;(function($,window,document,undefined){ $.fn…

cdr怎么给制作玻璃砖效果?

cdr怎么给制作玻璃砖效果?

效果,电脑软件,cdr,CorelDRAW中想要给图片制作玻璃砖效果,cdr中自带了这个这个效果,该怎么制作呢?下面我们就来看看详细的教程。软件名称:CorelDRAW X5 中文正式版 v15.2.0.661 附详细安装教程软件大小:496MB更新时间:2016-05-161、打开CorelDRAW…

JS字符串按逗号和回车分隔的方法

JS字符串按逗号和回车分隔的方法

方法,字符串,逗号,电脑软件,JS,split函数可以传入一个正则表达式作为分隔的字符串。function foo(str){ var temp = str.split(/[\n,]/g); for(var i =0;i<temp.length;i++){ if(temp[i] == ""){ temp.splice(i, 1); /…

js时间戳格式化成日期格式的多种方

js时间戳格式化成日期格式的多种方

时间戳,方法,日期格式,多种,格式,js需要把时间戳转为为普通格式,一般的情况下可能用不到的, 下面先来看第一种吧function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); } alert(…

PS有哪些专业术语? 初学者必看的ps

PS有哪些专业术语? 初学者必看的ps

专业术语,必看,初学者,有哪些,电脑软件,ps中有一些专业术语,如果不理解的朋友别人将专业术语自己是听不懂的,该怎么理解这些专业术语呢?下面我们就来看看那详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时…

解决ionic和angular上拉加载的问题

解决ionic和angular上拉加载的问题

上拉加载,电脑软件,ionic,angular,说到ionic上拉加载就跟pc的分页是一样的,他需要在html数据列表的最下面边添加<ion-infinite-scroll ng-if="hasmore" on-infinite="loadMore()" distance="10%"> </ion-infinite-scroll> 当列表为空 …