Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以在javascript中的对象上指定通用getter吗?_Javascript_Object_Getter - Fatal编程技术网

我们可以在javascript中的对象上指定通用getter吗?

我们可以在javascript中的对象上指定通用getter吗?,javascript,object,getter,Javascript,Object,Getter,我想做: properties.email.value不会触发如下错误:无法读取“未定义”的“value” 但是,我不想这样做: properties.email&&properties.email.value我不想使用帮助程序,比如:get(properties,'email.value') 我真的想保留语法properties.email.value 我可以通过以下方式解决此问题: Object.defineProperty(properties, 'email', { get: ()

我想做:

properties.email.value
不会触发如下错误:
无法读取“未定义”的“value”

但是,我不想这样做:

properties.email&&properties.email.value
我不想使用帮助程序,比如:
get(properties,'email.value')


我真的想保留语法
properties.email.value

我可以通过以下方式解决此问题:

Object.defineProperty(properties, 'email', {
 get: () => properties.email && properties.email.value,
 enumerable: true,
 configurable: true
});
现在,
getter
负责我的安全检查。太好了

但我也希望能够安全地执行
properties.name.value
。 但是由于
properties
对象来自API(json),我不知道
properties
的完整列表


那么,有没有一种方法可以对任何道具访问使用这种“神奇的”
get
语法,比如:
properties[ANYTHING].value

好的,我有这样的东西

但是您必须以这种方式创建
属性

希望这有帮助:)

var属性={
电话:{
值:“123456789”
}  
}
变量处理程序={
get:函数(目标、名称){
返回target.hasOwnProperty(name)?target[name]:{};
}
};
var new_properties=新代理(属性、处理程序);
console.log(“phone.value=“+new_properties.phone.value”);
console.log(“email.value=“+new_properties.email.value”);
new_properties.email={
价值:1
};

console.log(“分配后的email.value=“+new_properties.email.value”)好的,我有这样的东西

但是您必须以这种方式创建
属性

希望这有帮助:)

var属性={
电话:{
值:“123456789”
}  
}
变量处理程序={
get:函数(目标、名称){
返回target.hasOwnProperty(name)?target[name]:{};
}
};
var new_properties=新代理(属性、处理程序);
console.log(“phone.value=“+new_properties.phone.value”);
console.log(“email.value=“+new_properties.email.value”);
new_properties.email={
价值:1
};
console.log(“分配后的email.value=“+new_properties.email.value”)您可以使用和获取已知属性以及未知属性的自定义结果

对于更改属性,可以采用相同的方法设置值

var属性={email:{value:'foo@example.com' } },
代理=新代理(
属性,
{
获取:功能(目标、道具、接收器){
如果(目标中的道具){
返回目标[prop]&&target[prop]。值
}否则{
返回;
}
},
设置:功能(目标、道具、值){
如果(目标中的道具){
目标[prop]。值=值;
}否则{
目标[prop]={value};
}
}
}
);
console.log(proxy.email);
console.log(proxy.bar);
proxy.email='41';
console.log(proxy.email)您可以使用和获取已知属性以及未知属性的自定义结果

对于更改属性,可以采用相同的方法设置值

var属性={email:{value:'foo@example.com' } },
代理=新代理(
属性,
{
获取:功能(目标、道具、接收器){
如果(目标中的道具){
返回目标[prop]&&target[prop]。值
}否则{
返回;
}
},
设置:功能(目标、道具、值){
如果(目标中的道具){
目标[prop]。值=值;
}否则{
目标[prop]={value};
}
}
}
);
console.log(proxy.email);
console.log(proxy.bar);
proxy.email='41';

console.log(proxy.email)我不敢相信我在做这个

var wordlength = 7;
var alphabet="abcdefghijklmnopqrstuvwxyz";
alphabet += alphabet.toUpperCase() + "0123456789_";
var alen = alphabet.length;
var buildWord = function(number){
    if(number===0){
        return '';
    }
    return alphabet[number%alen]+buildWord(Math.floor(number/alen));
};
var total = Math.pow(alen, wordlength);
for(var i = 1; i<total; i++){
    var w = buildWord(i);
    if(isNaN(w[0]) && Object.prototype[w]===undefined){
        Object.prototype[w]={};
    }
}
var wordlength=7;
var alphabet=“abcdefghijklmnopqrstuvxyz”;
alphabet+=alphabet.toUpperCase()+“0123456789_389;”;
var alen=字母表长度;
var buildWord=函数(数字){
如果(数字==0){
返回“”;
}
返回字母表[number%alen]+buildWord(数学楼层(number/alen));
};
var total=数学功率(alen,字长);

对于(var i=1;i我简直不敢相信我会这么做

var wordlength = 7;
var alphabet="abcdefghijklmnopqrstuvwxyz";
alphabet += alphabet.toUpperCase() + "0123456789_";
var alen = alphabet.length;
var buildWord = function(number){
    if(number===0){
        return '';
    }
    return alphabet[number%alen]+buildWord(Math.floor(number/alen));
};
var total = Math.pow(alen, wordlength);
for(var i = 1; i<total; i++){
    var w = buildWord(i);
    if(isNaN(w[0]) && Object.prototype[w]===undefined){
        Object.prototype[w]={};
    }
}
var wordlength=7;
var alphabet=“abcdefghijklmnopqrstuvxyz”;
alphabet+=alphabet.toUpperCase()+“0123456789_389;”;
var alen=字母表长度;
var buildWord=函数(数字){
如果(数字==0){
返回“”;
}
返回字母表[number%alen]+buildWord(数学楼层(number/alen));
};
var total=数学功率(alen,字长);

对于(var i=1;我认为答案是
NO
。因为
属性[任何东西]
将返回
undefined
。并且
undefined
没有属性。是的,我同意。这就是为什么我想知道是否有方法使用
对象。定义属性
util并在
任何
属性上设置
get
方法。但我认为我们只能使用其对象中已经存在的属性来实现这一点elf。我认为没有神奇的
getter
。如果你愿意使用lodash,你可以使用。该功能通常被称为“空传播”,这里有一个很好的线索:我认为答案是
没有
。因为
属性[任何东西]
将返回
undefined
。并且
undefined
没有属性。是的,我同意。这就是为什么我想知道是否有方法使用
对象。定义属性
util并在
任何
属性上设置
get
方法。但我认为我们只能使用其对象中已经存在的属性来实现这一点elf。我认为没有神奇的
getter
。如果你愿意使用lodash,你可以使用。该功能通常被称为“空传播”,这里有一个很好的线索