gpt4 book ai didi

javascript - 为什么我从 DefineProperty 方法中得到未定义的值?

转载 作者:行者123 更新时间:2023-12-03 04:13:37 27 4
gpt4 key购买 nike

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
});

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

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

感谢您提供的所有提示。非常感谢!

最佳答案

有两个问题:

  1. 您只是箭头函数分配给descriptor.value。不调用它。
  2. 您实际上并没有在任何地方设置该属性。

我认为这应该可以解决问题

var funcSetter = {

defineProperty: function(target, prop, descriptor) {
if (prop) {
let temp = descriptor.value;
// Use an IIFE
descriptor.value = (temp => {
if (temp.startsWith('_')) {
return "Default Value Attached , no Underscores allowed";
} else {
return temp;
};
})(temp);
}
// Use Reflect.defineProperty to actually set the property
return Reflect.defineProperty(target, prop, descriptor);
}
};

let obj_3 = {};
let proxy_3 = new Proxy(obj_3, funcSetter);

Object.defineProperty(proxy_3, 'no', {
value: '_Bharath',
writable: true,
enumerable: true,
configurable: true
});

console.log(obj_3);

此外,还有一种更简单的方法来做到这一点

var funcSetter = {

defineProperty: function(target, prop, descriptor) {
if (prop) {
if (descriptor.value.startsWith('_')) {
descriptor.value = "Default Value Attached , no Underscores allowed";
}
}
// Use Reflect.defineProperty to actually set the property
return Reflect.defineProperty(target, prop, descriptor);
}
}
let obj_3 = {};
let proxy_3 = new Proxy(obj_3, funcSetter);

Object.defineProperty(proxy_3, 'no', {
value: '_Bharath',
writable: true,
enumerable: true,
configurable: true
});

console.log(obj_3);

关于javascript - 为什么我从 DefineProperty 方法中得到未定义的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44235864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com