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 日历提醒系统( 兼容所有浏览器 )
Apr 07 Javascript
JavaScript调用Activex控件的事件的实现方法
Apr 11 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
AngularJS 中的事件详解
Jul 28 Javascript
详解利用Angular实现多团队模块化SPA开发框架
Nov 27 Javascript
JavaScript callback回调函数用法实例分析
May 08 Javascript
老生常谈JS中的继承及实现代码
Jul 06 Javascript
JSON基本语法及与JavaScript的异同实例分析
Jan 04 Javascript
Vue实现回到顶部和底部动画效果
Jul 31 Javascript
javascript数组元素删除方法delete和splice解析
Dec 09 Javascript
微信小程序APP的生命周期及页面的生命周期
Apr 19 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 随机数的深入理解
2013/06/05 PHP
php curl模拟post请求小实例
2013/11/13 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
php微信开发接入
2016/08/27 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
Bootstrap Table从零开始
2017/06/30 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
react的hooks的用法详解
2020/10/12 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python中条件判断语句的简单使用方法
2015/08/21 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
一文读懂Python 枚举
2020/08/25 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
优秀毕业生自荐信
2014/06/10 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
表扬通报怎么写
2015/01/16 职场文书
交通安全教育主题班会
2015/08/12 职场文书
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python