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 相关文章推荐
js 处理URL实用技巧
Nov 23 Javascript
判断一个变量是数组Array类型的方法
Sep 16 Javascript
jQuery实现contains方法不区分大小写的方法
Feb 13 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
Sep 09 Javascript
属于你的jQuery提示框(Tip)插件
Jan 20 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
Jun 25 Javascript
ES6中的箭头函数实例详解
Apr 06 Javascript
JavaScript根据json生成html表格的示例代码
Oct 24 Javascript
说说如何在Vue.js中实现数字输入组件的方法
Jan 08 Javascript
Vue.js轮播图走马灯代码实例(全)
May 08 Javascript
vue 函数调用加括号与不加括号的区别
Oct 29 Javascript
JS如何实现在弹出窗口中加载页面
Dec 03 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 取得瑞年与平年的天数的代码
2009/08/10 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
php输出形式实例整理
2020/05/05 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
基于jQuery的日期选择控件
2009/10/27 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
简单的js表格操作
2016/09/24 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
KMP算法精解及其Python版的代码示例
2016/06/01 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
python实现SOM算法
2018/02/23 Python
对python中的pop函数和append函数详解
2018/05/04 Python
Django添加sitemap的方法示例
2018/08/06 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
总经理秘书岗位职责
2014/03/17 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
使用python绘制横竖条形图
2022/04/21 Python