学习记录ES6反射内置对象Proxy与Reflect
2017-02-13 06:33
295 查看
工作中遇见了一个这样的需求:网页预览视频文件(格式有两种mp4与wmv)时,mp4格式的采用浏览器自带的video标签进行播放,wmv格式的由于浏览器不支持直接播放,则需要调用定制的wmvH5播放器来播放。
经调研发现wmvH5播放器实际上也是采用video标签进行播放的,只不过是加载、播放、暂停、定位播放等核心功能进行了特殊定制,其他如音量控制、播放状态等都是video自带的。
为了减少冗余代码,统一调用接口,我首先想到的是JS的对象继承、方法覆写,可没能实现。后来通过翻阅MDN的JavaScript参考文档发现了两个反射内置对象Proxy与Reflect,完美解决我现在遇见的问题。两个内置对象的使用在文档中阐述的已经很详细,这里不再累述。仅此记录提出问题、解决问题的过程。
Reflect
Proxy
经调研发现wmvH5播放器实际上也是采用video标签进行播放的,只不过是加载、播放、暂停、定位播放等核心功能进行了特殊定制,其他如音量控制、播放状态等都是video自带的。
为了减少冗余代码,统一调用接口,我首先想到的是JS的对象继承、方法覆写,可没能实现。后来通过翻阅MDN的JavaScript参考文档发现了两个反射内置对象Proxy与Reflect,完美解决我现在遇见的问题。两个内置对象的使用在文档中阐述的已经很详细,这里不再累述。仅此记录提出问题、解决问题的过程。
参考文档
JavaScript参考文档Reflect
Proxy
代码片段
video = document.getElementsByTagName('video')[0]; MyVideo = new Proxy(video, { get : function(target, name) { console.log(name); console.log(typeof target[name]) if ('function' == typeof target[name]) {//当是function时需要二次代理 return new Proxy(target[name], { apply : function(target, thisArg, argumentsList) { console.log("called: " + argumentsList.join(", ")); return target.apply(video, argumentsList); } }); } else { return target[name]; } }, set : function(target, property, value) { target[property] = value; return value; } });
相关文章推荐
- jsp内置对象学习记录
- JSP学习记--03(Jsp内置对象request)
- JavaScript学习记录(对象)
- [学习记录]js处理json的list对象
- C++ 对象模型学习记录(2)--- 第3章 data语义学
- C++ 对象模型学习记录(1)--- 第2章 构造函数语义学
- java学习笔记(六)----对象的类型转换, 匿名内置类
- 面向对象学习记录3
- ASP.Net内置对象学习笔记
- JSP内置9大对象学习总结(三)
- C ++ 对象模型学习记录(4) function 语义学 (未完待续)
- javascript:内置对象学习笔记一
- JSP学习笔记二(内置对象)
- 学习记录———.net内置类库Ping来实现ping程序
- 黑马程序员Java培训、Android培训-Java 学习过程记录_面向对象上
- [DB2 学习记录]9. 访问对象
- 学习JavaScript 的必备 (一),让您对js的 function, javascript内置对象,this概念及之间的关系不再迷惑。(希望能置为推荐篇,为更多的js初学者关注)
- Python 学习记录(1)对象命名导致的问题
- js内置对象 学习笔记
- 面向对象学习记录2