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


Posted in Javascript onSeptember 02, 2017

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

Javascript 相关文章推荐
JavaScript中神奇的call()方法
Mar 12 Javascript
jQuery中使用each处理json数据
Apr 23 Javascript
jQuery实现选项卡切换效果简单演示
Dec 09 Javascript
关于function类中定义变量this的简单说明
May 28 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
Sep 23 Javascript
svg动画之动态描边效果
Feb 22 Javascript
vue项目部署上线遇到的问题及解决方法
Jun 10 Javascript
Taro集成Redux快速上手的方法示例
Jun 21 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
Feb 21 Javascript
Vue动态组件与异步组件实例详解
Feb 23 Javascript
Vue动态组件和异步组件原理详解
May 06 Javascript
js实现坦克大战游戏
Feb 24 Javascript
使用vue-resource进行数据交互的实例
Sep 02 #Javascript
jquery tmpl模板(实例讲解)
Sep 02 #jQuery
自制简易打赏功能的实例
Sep 02 #Javascript
Vue使用vue-cli创建项目
Sep 01 #Javascript
vue 里面使用axios 和封装的示例代码
Sep 01 #Javascript
ionic2懒加载配置详解
Sep 01 #Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 #Javascript
You might like
PHP中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
jQuery列表拖动排列具体实现
2013/11/04 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
使用Python脚本操作MongoDB的教程
2015/04/16 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
python组合无重复三位数的实例
2018/11/13 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
Python argparse模块使用方法解析
2020/02/20 Python
Python matplotlib实时画图案例
2020/04/23 Python
谈谈python垃圾回收机制
2020/09/27 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
高校十八大报告感想
2014/01/27 职场文书
优秀老师事迹材料
2014/02/05 职场文书
文案策划求职信
2014/03/18 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
小学中队委竞选稿
2015/11/20 职场文书
python的变量和简单数字类型详解
2021/09/15 Python