ES6部分源码重写 -4(1-classES7中的扩展)
时间:2022-07-25
本文章向大家介绍ES6部分源码重写 -4(1-classES7中的扩展),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
ES7class新增填的属性
使用ES7需要使用babel插件对语言进行降级,否则会报错
首先需要下载babel插件(前提是已经安装了node.js) babel的安装教程在之前的ES6中已经学习,现在需要补上ES7降级的插件 一共是两个
- npm install @babel/plugin-proposal-decorators
- npm install @babel/plugin-proposal-class-properties 下载好这两个插件以后还需要在.babelrc文件中去配置
此处的presets是插件集合 plugins中的为插件集合中没有的插件,需要重新添加的 注意事项:插件可能存在依赖关系,所以顺序不能颠倒
1. 添加构造方法的静态属性
我们现在此处添加一个class类
class Search{
static serverPath = "192.168.1.1";//填加构造函数的静态属性
constructor(){
this.keyword = "";//关键字
}
}
2. 添加比ES6简单的私有属性书写方法
class Search{
static serverPath = "192.168.1.1";//填加构造函数的静态属性
constructor(){
this.keyword = "";//关键字
}
serverName = "serverA-"; //此处定义的就是私有属性
}
3. 装饰器
此处先诠释一下什么是装饰器?相信前端刚接触这个词的时候很懵逼。
我们先来看这样一个需求:
- 场景一: 某公司开发,猿A写了一个登陆功能,此功能只具有验证用户名和密码的功能。因为公司盈利降低,此时猿A就被公司开除了,而且在此时,登陆模块的需求发生更改,需要在之前的基础上添加表单信息验证。刚接到工作的猿B有几种解决方案,第一种,直接拿着猿A的代码开始撸,把以前的代码重新改。很显然,猿B要改猿A的代码,首先需要看懂猿A的代码逻辑,然后再加上自己的逻辑,一番操作下来,猿B完成了工作,但是,可能要花几倍的时间。
- 场景二:还是刚才这个场景,但是,猿B用了装饰器的思想,我不去更改猿A的代码,我直接调用猿A的代码,并在他的前面或者后面添加自己的功能即可,这样下来,猿B也不用看猿A的代码,大大的节省了开发效率
其实学过java的同学应该知道,spring框架的aop就是这种思想,面向切面编程,把一个方法看成一个切点,我们在此切点的前后做我们需要做的事情 装饰器的实质就是:面向切面编程,不去看以前代码的逻辑,新添加功能的时候,是在以前代码的基础上,在方法前或者方法后去添加更加强大的功能,而不是去更改以前的代码
在理解了装饰器的前提下,我们来看看ES5中的一个案例
需求:
- 在输入的时候向服务器发送数据
- 在1的前提下,新增收集数据的功能
采用的思想
- 此处采用了面向切面编程的思想,在getContent()方法前添加了一个收集数据的方法
- 并且此处采用了代理模式的思想,我们将添加新增事件后的对象统一交给newGetContent方法来管理 html代码
<input type="text" id="inp">
<button id="search">search</button>
js代码
var oInput = document.getElementById("inp");
var oBtn = document.getElementById("search");
var keyWord = "";
oInput.oninput = function(){
keyWord = this.value;
}
oBtn.onclick = function(){
newGetContent(keyWord);
}
function getContent(data){
var url = "urlA-";
console.log("向服务器" + url + "数据:" + data);
}
var newGetContent = dealContent(getContent);//代理模式的思想
function dealContent(data){
//添加另外一个收集数据的方法
return function(data){
var url = "urlB-";
console.log("想服务器" + url + "收集数据" + data);
return getContent.apply(this,arguments);
}
}
如果各位同学看到这里还不够过瘾,可以继续看下一篇关于ES7修饰器的详解
- http和www服务基础知识
- 手把手教你在VirtualBox中与主机共享文件夹
- Kafka与Logstash的数据采集对接 —— 看图说话,从运行机制到部署
- Kafka入门初探+伪集群部署
- Beats数据采集---PacketbeatFilebeatTopbeatWinlogBeat使用指南
- linux NFS网络文件系统
- linux基础命令
- 国外大学自办星际赛事 鼓励学生自制AI来对战
- linux中的重要目录
- Mysql-2-数据库基础
- Shell-4-让文本飞
- Java程序员的日常——存储过程知识普及
- Java程序员的日常—— 基于类的策略模式、List<?>与List、泛型编译警告、同比和环比
- Shell-3-文件之名
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【LeetCode每日一题】21. Merge Two Sorted Lists
- 计算广告笔记06-程序化交易广告
- TF入门05-实验过程管理
- [LeetCode]709. To Lower Case
- ISO C forbids comparison between pointer and integer [-fpermissive]
- 【疑难杂症】解决-TensorFlow “FutureWarning: Conversion of the”
- [Deep-Learning-with-Python] 文本序列中的深度学习
- TN-SCUI2020挑战赛详细讲解
- QSignalMapper使用以及替换方法
- 对于组件的可重用性,大佬给出来6个级别的见解,一起过目一下!
- 多个线程为了同个资源打起架来了,该如何让他们安分?
- 实战|记录一次渗透测试项目
- SVN工具分析
- 客服MM被投诉说下单耗时很长,老板下令必须控制在1秒以内
- 介绍两个刷 SQL 题的网站