zoukankan      html  css  js  c++  java
  • @芥末的糖 ---------- 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
  • 相关阅读:
    loj#6433. 「PKUSC2018」最大前缀和(状压dp)
    PKUWC2019游记
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/moonzwt/p/9889016.html
Copyright © 2011-2022 走看看