您的位置:首页 > 其它

学习记录ES6反射内置对象Proxy与Reflect

2017-02-13 06:33 295 查看
工作中遇见了一个这样的需求:网页预览视频文件(格式有两种mp4与wmv)时,mp4格式的采用浏览器自带的video标签进行播放,wmv格式的由于浏览器不支持直接播放,则需要调用定制的wmvH5播放器来播放。

经调研发现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;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Proxy Reflect