ES6中Proxy与Reflect实现重载(overload)的方法

 更新时间:2017年03月30日 14:29:59   作者:柒青衿  
这篇文章主要介绍了ES6中Proxy与Reflect实现重载(overload)的方法,分析了重载的原理及使用Proxy和Reflect来实现重载的操作步骤与相关技巧,需要的朋友可以参考下

本文实例讲述了ES6中Proxy与Reflect实现重载(overload)的方法。分享给大家供大家参考,具体如下:

Proxy与Reflect实现重载(overload)

从语法角度讲JavaScript不支持重载。原因很简单,JS中函数可以传入任意类型、任意个数的参数,通通可以通过在函数内使用this.arguments获得。这样,就无法实现同名函数参数列表不同实现不同功能。当然,在实际使用过程中,可以人为去检测传入实参的个数及类型,来进行不同操作。但是,我认为这不能叫做重载。

ES6带来了Proxy和Reflect,配合使用可以实现重载。Proxy用于修改某些操作的默认行为,相当于对原始想进行的操作进行“包装”;Reflect对象的方法与Proxy对象的方法一一对应,这使得Proxy对象可以方便的调用对应的Reflect方法完成默认行为。我们可以这样使用它们:

function LogMessage( m ){
  this.m = m;
}
var message = new LogMessage( 1 );
var overload = new Proxy(message , {
  get: function(target, key, receiver){
    console.log(`getting ${key}`);
    return Reflect.get(target , key , receiver);
  },
  set: function(target, key, value, receiver){
    console.log(`setting ${key}`);
    return Reflect.set(target, key, value, receiver);
  }
});
overload.m = 2; //setting m
var s = overload.m; //getting m

看到了没,是不是很有意思,新创建的Proxy对象overload可以完成目标对象message的操作,同时,可以通过在默认操作之前自定义一些其他操作。我认为,这更像Java里的重载。

那么Proxy与Reflect有哪些实例方法呢?

1.get()
用于拦截某个属性的读取操作。

2.set()
用于拦截某个属性的赋值操作。

3.has()
可以隐藏某些属性,不被in操作符遍历到。

4.construct()
用于拦截new命令。

5.deleteProperty()
用于拦截delete操作。

6.defineProperty()
用于拦截Object.defineProperty操作。

7.enumerate()
用于拦截for...in循环。

8.getOwnPropertyDescriptor()
用于拦截Object.getOwnPropertyDescriptor操作。

9.isExtensible()
用于拦截Object.isExtensible操作。

10.preventExtensions()
用于拦截Object.preventExtensions操作。

11.setPrototypeOf()
用于拦截Object.setPrototypeOf操作。

上面很多方法不是很常用,如果感兴趣可以去查查相关资料

希望本文所述对大家ECMAScript程序设计有所帮助。

相关文章

  • js自定义事件代码说明

    js自定义事件代码说明

    在研发公展公用后台的时候,用了许多的技巧性的JS,最有代表性就是如下这一例子.
    2011-01-01
  • 深入浅析JavaScript中数据共享和数据传递

    深入浅析JavaScript中数据共享和数据传递

    这篇文章主要介绍了深入浅析JavaScript中数据共享和数据传递的相关资料,需要的朋友可以参考下
    2016-04-04
  • javascript自定义的addClass()方法

    javascript自定义的addClass()方法

    这篇文章主要介绍了javascript自定义的addClass()方法,通过传参就可以实现样式的添加
    2014-05-05
  • Bootstrap中data-target 到底是什么

    Bootstrap中data-target 到底是什么

    这篇文章主要介绍了Bootstrap中data-target 到底是什么的相关资料,我目前理解到在bootstrap中data-target,data-toggle等属性主要有两种作用,具体哪两种作用,大家通过本文详细了解下
    2017-02-02
  • 微信小程序多项选择器checkbox

    微信小程序多项选择器checkbox

    这篇文章主要为大家详细介绍了微信小程序多项选择器checkbox,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • javascript手工制作悬浮菜单

    javascript手工制作悬浮菜单

    这篇文章主要介绍了javascript手工制作悬浮菜单,主要也是想自己练练手,感觉还不错,这里推荐给大家。
    2015-02-02
  • js实现GIF图片的分解和合成

    js实现GIF图片的分解和合成

    这篇文章主要为大家详细介绍了js实现GIF图片的分解和合成,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • javascript实现小型区块链功能

    javascript实现小型区块链功能

    这篇文章主要介绍了javascript实现小型区块链功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 深入浅出JavaScript中base64编码原理

    深入浅出JavaScript中base64编码原理

    今天翻开旧项目发现挺多图片相关的插件都是用 base64 来显示图片的。谈到 base64,脑海遐想翩翩,思绪回荡之下 base64 瑕瑜互见。这篇文章主要是记录了工作中遇见的问题并加以总结,如有不妥请指正
    2023-02-02
  • 浅谈js中startsWith 函数不能在任何浏览器兼容的问题

    浅谈js中startsWith 函数不能在任何浏览器兼容的问题

    下面小编就为大家带来一篇浅谈js中startsWith 函数不能在任何浏览器兼容的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论