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操作word的参考代码
Oct 26 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
Feb 27 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
JavaScript中的Function函数
Aug 27 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
Nov 04 Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 Javascript
JS判断数组四种实现方法详解
Jun 29 Javascript
JS PHP字符串截取函数实现原理解析
Aug 29 Javascript
JavaScript动态生成表格的示例
Nov 02 Javascript
详解Vue数据驱动原理
Nov 17 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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
PHP反射机制用法实例
2014/08/28 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
session 加入redis的实现代码
2016/07/15 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
thinkphp5使用无限极分类
2019/02/18 PHP
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
2020/11/09 jQuery
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python中类的初始化特殊方法
2017/12/01 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
python可视化实现KNN算法
2019/10/16 Python
Python2与Python3的区别点整理
2019/12/12 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
python怎么判断素数
2020/07/01 Python
浙大网新C/C++面试解惑
2015/05/27 面试题
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
精细化工应届生求职信
2013/11/17 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
优秀企业获奖感言
2014/02/01 职场文书
《王二小》教学反思
2014/02/27 职场文书
服务承诺书怎么写
2014/05/24 职场文书
办公室日常管理制度
2015/08/04 职场文书