Javascript 为什么我要从defineProperty方法中获得一个未定义的值?

Javascript 为什么我要从defineProperty方法中获得一个未定义的值?,javascript,proxy,arrow-functions,Javascript,Proxy,Arrow Functions,我在这里面临的问题是,当我调用trapdefineProperty时,descriptor.value下定义的箭头函数不会被调用,会在底部返回true,并将属性的值设置为undefined 我很确定我没有正确使用箭头功能。有人能给我指引正确的方向吗 谢谢你给我的提示。非常感谢 有两个问题: 您只是将箭头函数分配给描述符.value。不叫它 实际上,您没有在任何地方设置属性 我认为这应该解决问题 var funcSetter={ 定义属性:函数(目标、属性、描述符){ 如果(道具){ 设temp

我在这里面临的问题是,当我调用trap
defineProperty
时,
descriptor.value
下定义的箭头函数不会被调用,会在底部返回true,并将属性的值设置为
undefined

我很确定我没有正确使用箭头功能。有人能给我指引正确的方向吗


谢谢你给我的提示。非常感谢

有两个问题:

  • 您只是将箭头函数分配给描述符.value。不叫它
  • 实际上,您没有在任何地方设置属性
  • 我认为这应该解决问题

    var funcSetter={
    定义属性:函数(目标、属性、描述符){
    如果(道具){
    设temp=descriptor.value;
    //利用生命
    descriptor.value=(临时=>{
    if(温度启动带(“”“)){
    返回“附加默认值,不允许使用下划线”;
    }否则{
    返回温度;
    };
    })(临时工);
    }
    //使用Reflect.defineProperty实际设置属性
    返回Reflect.defineProperty(目标、属性、描述符);
    }
    };
    设obj_3={};
    设proxy_3=新代理(obj_3,functsetter);
    Object.defineProperty(proxy_3,“no”{
    值:“_Bharath”,
    可写:对,
    可枚举:正确,
    可配置:true
    });
    
    控制台日志(obj_3)请添加一些用例。这是我在学习JS中的代理和反射时尝试的东西。没有用例本身。defineProperty方法必须返回一个布尔值,指示属性是否已成功定义-是的,我知道,但当我尝试访问属性值“否”时,我没有定义。对不起,误读了您的代码:p生命的设计太过复杂。我同意。尝试以最少的修改更改OP的代码。一个普通的
    if..else
    应该就足够了。我尝试了一个简单直接的方法来解决这个问题,但它让我感到困惑,为什么箭头函数方法不起作用。@MaazSyedAdeeb谢谢你的解决方案,我是IILife的新手。这种方法有什么潜在的优势吗?在你的情况下,我认为没有任何好处。IIFE只不过是一个在定义之后立即执行的函数。
    var funcSetter = {
    
        defineProperty: function(target, prop, descriptor) {
            if (prop) {
                let temp = descriptor.value;
                descriptor.value = temp => {
                    if (temp.startsWith('_')) {
                        temp = "Default Value Attached , no Underscores allowed";
                        return temp;
                    } else return temp;
                };
            }
            return true;
        }
    };
    
    let proxy_3 = new Proxy(obj_3, funcSetter);
    
    Object.defineProperty(proxy_3, 'no', {
        value: '_Bharath',
        writable: true,
        enumerable: true,
        configurable: true
    });