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 相关文章推荐
判断是否输入完毕再激活提交按钮
Jun 26 Javascript
FireBug 调试JS入门教程 如何调试JS
Dec 23 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
Bootstrap实现默认导航栏效果
Sep 21 Javascript
老生常谈原生JS执行环境与作用域
Nov 22 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
Apr 26 Javascript
Angularjs为ng-click事件传递参数
Jun 15 Javascript
vue-cli监听组件加载完成的方法
Sep 07 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
Nov 21 Javascript
一文快速了解JQuery中的AJAX
May 31 jQuery
laydate只显示时分 不显示秒的功能实现方法
Sep 28 Javascript
JS中FileReader类实现文件上传及时预览功能
Mar 27 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数组转成json格式的方法
2015/03/09 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
Node.js文件操作详解
2014/08/16 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
Django数据库表反向生成实例解析
2018/02/06 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
python计算无向图节点度的实例代码
2019/11/22 Python
python 伯努利分布详解
2020/02/25 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
基于Python实现简单学生管理系统
2020/07/24 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
保护环境倡议书500字
2014/05/19 职场文书
2014年师德承诺书
2014/05/23 职场文书
动物科学专业求职信
2014/07/27 职场文书
作风建设整改方案
2014/10/27 职场文书
团员个人总结
2015/02/26 职场文书
python中对列表的删除和添加方法详解
2022/02/24 Python