ES6新特性(8)之Decorator修饰器/二进制数组

简介: ES6新特性(8)之Decorator修饰器/二进制数组

(一)Decorator修饰器


修饰器(Decorator)是一个函数,用来修改类的行为。这是ES7的一个提案,目前Babel转码器已经支持。  

需要先安装一个插件:  

npm install babel-plugin-transform-decorators-legacy --save-dev  

然后在项目根目录下,找到:.babelrc=>修改为  

"plugins": ["transform-runtime","transform-decorators-legacy"],  

  //添加属性,添加方法,在方法执行之前添加动作  

1.给添加一个静态方法(属性)  

function chooseCourse(target){  
      target.cours='物理';  
   }  
   function classroom(target) {  
      target.study=function(){  
        console.log(target.identity+'学习');  
      }  
    }  
    @chooseCourse  
    @classroom  
    class Student {  
    }  
    Student.study();  
复制代码

2.修饰器带参数  

function chooseCourse(courseName){  
    return function(target){  
        target.courseName=courseName;  
    }  
  }  
function classroom(roomName){  
    return function(target){  
        target.study=function(){  
          console.log('在'+roomName+'学习'+target.courseName);  
        }  
    }  
  }  
@chooseCourse('物理')  
@classroom('第1教室')  
class Student {  
}  
    Student.study();  
复制代码

3.修饰器不仅可以修饰类,还可以修饰类的方法(属性)  

function chooseCourse(courseName){  
    return function(target){  
        console.log('检查准考证:'+target.uid);  //target中的this发生指针转移  
        target.courseName=courseName;  
    }  
  }  
class Student {  
  constructor(){  
    this.uid=15;  
  }  
   @chooseCourse('物理')  
   exam(){  
      console.log(this.uid+'考试,考:'+this.courseName);  
   }  
}  
    //Student.study();  
    let student = new Student();  
    //student.uid=15;  
    student.exam();  
复制代码

 4.修饰器只能用于类和类的方法,不能用于函数,会导致函数提升而发生错误  

//---------错误-------------------------  
    @chooseCourse('物理')  
    function Teacher(){               
      teach(){  
        console.log('讲师教:'+this.courseName);  
      }  
    }  
    Teacher.teach();  
复制代码

 5.装饰模式与代理模式的差别  

装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。  

使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。

(二)二进制数组


es6中二进制数组包括:用

ArrayBuffer对象

TypedArray视图

DataView视图

ArrayBuffer对象代表原始的二进制数据,TypedArray视图用来读写简单类型的二进制数据,DataView视图用来读写复杂类型的二进制数据。

用来存储文件,流等数据的存储

以ArrayBuffer对象为例:

<input type='file' name='fileInput' id='fileInput' v-on:change='showImg'/>
<img :src ="buffer"/>
<script>
function arrayBufferToBase64( buffer ) {
        var binary = '';
        var bytes = new Uint8Array( buffer );
        var len = bytes.byteLength;
        for (var i = 0; i < len; i++) {
            binary += String.fromCharCode( bytes[ i ] );
        }
        return window.btoa( binary );
    }
var thisa;
export default {
  name: 'hello',
  data () {
    studyEs6();
    return {
      buffer:'data:image/png;base64,',
      msg: '欢迎 to Your Vue.js App',
    }
  },
  created (){
    thisa=this;
  },
  methods: {
    showImg:function(){
      //alert(thisa);
       var fileInput = document.getElementById('fileInput');
        //alert(fileInput);
        var file = fileInput.files[0];
        //alert(file);
        var reader = new FileReader();
        //alert(reader);
        reader.readAsArrayBuffer(file);
        reader.onload = function () {
          var arrayBuffer = reader.result;//reader.result.toByteArray;
          //alert(thisa.msg);
          let arrayBase = arrayBufferToBase64(arrayBuffer);
          thisa.buffer='data:image/png;base64,'+arrayBase;
        };
    }
  }
}
function studyEs6(){
}
</script>


作者:zhulin1028

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章
|
设计模式 前端开发 JavaScript
观察者模式 vs 发布-订阅模式:两种设计模式的对决!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
527 3
|
JavaScript 数据可视化 PHP
想要快速开发一个系统?选 BuildAdmin 就对了!
Part1介绍 基于 Vue3.3 + ThinkPHP8 + TypeScript + Vite + Pinia + Element Plus 等流行技术栈的后台管理系统,自适应多端、可视化 CRUD 代码生成、自带 WEB 终端、同时提供 Web、WebNuxt、Server 端、内置全局数据回收站和字段级数据修改保护、自动注册路由、无限子级权限管理等,无需授权即可免费商用,希望能帮助大家实现快速开发。
450 0
|
Web App开发 资源调度 JavaScript
vue element plus 安装
vue element plus 安装
405 0
|
人工智能 前端开发 Java
autojs非常见函数1
牙叔教程 简单易懂
2460 0
|
12月前
|
设计模式 存储 供应链
前端必须掌握的设计模式——观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,实现了一种订阅机制。它包含两个角色:**观察者**(订阅消息、接收通知并执行操作)和**被观察者**(维护观察者列表、发送通知)。两者通过一对多的关系实现解耦,当被观察者状态改变时,会通知所有订阅的观察者。例如,商店老板作为被观察者,记录客户的需求并在商品到货时通知他们。前端应用中,如DOM事件注册、MutationObserver等也体现了这一模式。
|
8月前
|
安全 智能硬件
云产品评测|安全体检,获奖名单公布!
云产品评测|安全体检,获奖名单公布!
156 0
|
12月前
|
设计模式 消息中间件 供应链
前端必须掌握的设计模式——发布订阅模式
发布订阅模式(Publish-Subscribe Pattern)是一种设计模式,类似于观察者模式,但通过引入第三方中介实现发布者和订阅者的解耦。发布者不再直接通知订阅者,而是将消息发送给中介,由中介负责分发给订阅者。这种方式提高了异步支持和安全性,适合复杂、高并发场景,如消息队列和流处理系统。代码实现中,通过定义发布者、订阅者和中介接口,确保消息的正确传递。此模式在前端开发中广泛应用,例如Vue的数据双向绑定。
|
网络协议 Linux 网络安全
Hyper-v 如何配置 Centos7 虚拟机网络?
Hyper-v 如何配置 Centos7 虚拟机网络?
489 0

热门文章

最新文章