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 原型链学习总结
Oct 29 Javascript
js下将字符串当函数执行的方法
Jul 13 Javascript
web性能优化之javascript性能调优
Dec 28 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
Dec 31 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
Jan 24 Javascript
JS根据生日算年龄的方法
May 05 Javascript
js和jQuery设置Opacity半透明 兼容IE6
May 24 Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
Nov 06 Javascript
JavaScript enum枚举类型定义及使用方法
May 15 Javascript
javascript 数组(list)添加/删除的实现
Dec 17 Javascript
js闭包的9个使用场景
Dec 29 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程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
学习vue.js计算属性
2016/12/03 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
英语专业推荐信
2013/11/16 职场文书
促销活动策划方案
2014/01/12 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
《雪儿》教学反思
2014/04/17 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
债务追讨律师函
2015/06/24 职场文书
《藏戏》教学反思
2016/02/23 职场文书
Python日志模块logging用法
2022/06/05 Python