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

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

相关文章
|
6月前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
62 1
|
7月前
|
SQL 自然语言处理 前端开发
【JavaScript】ECMAS6(ES6)新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析
【JavaScript】ECMAS6(ES6)新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析
55 2
|
8月前
|
前端开发 流计算 索引
JS+ES6新增字符串操作方法大汇总,共四十七种方法
JS+ES6新增字符串操作方法大汇总,共四十七种方法
|
8月前
|
JavaScript 前端开发 网络架构
JavaScript开发中ES6+新特性:解释箭头函数的作用以及它与普通函数的区别。
JavaScript开发中ES6+新特性:解释箭头函数的作用以及它与普通函数的区别。
79 1
|
前端开发 网络架构
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(二)
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(二)
|
前端开发 API 网络架构
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(六)
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(六)
|
前端开发 JavaScript 网络架构
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(三)
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(三)
|
Web App开发 JSON JavaScript
前端技术ES6新特性解构字符串扩展表达式箭头函数对象拓展运算符map 和 reduce Promise 模块化export import及Node.js
ECMAScript 6.0(以下简称 ES6,ECMAScript 是一种由 Ecma 国际(前身为欧洲计算机制造商协会,英文名称是 European Computer Manufacturers Association)通过 ECMA-262标准化的脚本程序设计语言)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了,并且从 ECMAScript 6 开始,开始采用年号来做版本。即 ECMAScript 2015,就是 ECMAScript6。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
103 0
index.js:39 错误:修饰类属性失败。请确保提案类属性已启用并设置为使用松散模式。要在规范模式下将提案类属性与修饰器一起使用,请在阶段 2 中等待下一个主要版本的装饰器。 #79
index.js:39 错误:修饰类属性失败。请确保提案类属性已启用并设置为使用松散模式。要在规范模式下将提案类属性与修饰器一起使用,请在阶段 2 中等待下一个主要版本的装饰器。 #79
88 0
ES6 从入门到精通 # 05:函数之扩展运算符、箭头函数
ES6 从入门到精通 # 05:函数之扩展运算符、箭头函数
67 0
ES6 从入门到精通 # 05:函数之扩展运算符、箭头函数