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 base64编码实现代码
Dec 02 Javascript
javascript页面上使用动态时间具体实现
Mar 18 Javascript
JavaScript极简入门教程(一):基础篇
Oct 25 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
jQuery实现微信长按识别二维码功能
Aug 26 Javascript
JavaScript九九乘法口诀表的简单实现
Oct 04 Javascript
Vue.js学习示例分享
Feb 05 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
Feb 21 Javascript
详解weex默认webpack.config.js改造
Jan 08 Javascript
js 图片转base64的方式(两种)
Apr 24 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
Jul 12 Javascript
用vue设计一个日历表
Dec 03 Vue.js
使用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
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
jQuery 1.0.2
2006/10/11 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
python实现批量按比例缩放图片效果
2018/03/30 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
如何用Python 加密文件
2020/09/10 Python
如何基于Python按行合并两个txt
2020/11/03 Python
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
路政管理毕业自荐书范文
2014/02/10 职场文书
创业培训计划书
2014/05/03 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
社区务虚会发言材料
2014/10/20 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript