@芥末的糖 ---------- ES6---Proxy与Reflect 实现重载(overload)

Posted moonzwt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@芥末的糖 ---------- 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; //getti
 
 
对应对象内建的14个方法,handler也有14个方法可以覆盖,下面我们将会一一讲解。
 
 
//14个内建的方法地址
//https://blog.csdn.net/qq_28506819/article/details/71077788

 

 



以上是关于@芥末的糖 ---------- ES6---Proxy与Reflect 实现重载(overload)的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何语言在 lua 中使用类似红宝石的糖生成目标代码?

7.29 Test—— Math Theory 1

看世界·芬兰|专访Hello Ruby作者:芬兰土壤下的编程教育

BZOJ4665小w的喜糖 容斥+组合数

Codeforces1371 E2. Asterism (Hard Version)

0305-分糖果