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 相关文章推荐
jQuery1.6 使用方法一
Nov 23 Javascript
window.open打开页面居中显示的示例代码
Dec 27 Javascript
JavaScript跨域方法汇总
Oct 16 Javascript
javascript实现校验文件上传控件实例
Apr 20 Javascript
原生JS实现平滑回到顶部组件
Mar 16 Javascript
jQuery 中ajax异步调用的四种方式
Jun 28 Javascript
微信小程序 picker 组件详解及简单实例
Jan 10 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
详解ES6中的 Set Map 数据结构学习总结
Nov 06 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
Jul 06 Javascript
node读写Excel操作实例分析
Nov 06 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
Nov 14 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
thinkphp控制器调度使用示例
2014/02/24 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
jQuery 选择器理解
2010/03/16 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
python DataFrame 修改列的顺序实例
2018/04/10 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
Python如何解除一个装饰器
2020/08/07 Python
python 实现波浪滤镜特效
2020/12/02 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
六道php面试题附答案
2014/06/05 面试题
前台文员岗位职责
2013/12/28 职场文书
现场施工员岗位职责
2014/03/10 职场文书
六查六看剖析材料
2014/10/06 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
教师节感谢信
2015/01/22 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android