Javascript 是否可以编写适用于每个名称的函数?
是否有可能为一个对象提供一个函数,该对象在调用函数时总是被调用,而不管其名称如何 或者换句话说:是否有可能有一个适用于所有可能名称的函数 可能需要对对象的Javascript 是否可以编写适用于每个名称的函数?,javascript,prototype,Javascript,Prototype,是否有可能为一个对象提供一个函数,该对象在调用函数时总是被调用,而不管其名称如何 或者换句话说:是否有可能有一个适用于所有可能名称的函数 可能需要对对象的原型进行一些更改 下面是一个如何工作的示例: const o = { [magic here]: () => 1; }; o.foo(); // returns 1 o.bar(); // returns 1 o.baz(); // returns 1 编辑以澄清我为什么要这样做: 我正在试验一种铁路规划方法。 基本上,我不希望
原型进行一些更改
下面是一个如何工作的示例:
const o = {
[magic here]: () => 1;
};
o.foo(); // returns 1
o.bar(); // returns 1
o.baz(); // returns 1
编辑以澄清我为什么要这样做:
我正在试验一种铁路规划方法。
基本上,我不希望手动检查对象是否为null
或未定义
并做出相应的反应,而是希望这是自动化的
例如:
// checks if object is null and returns a object, that can be called however without crashing
// thanks to T.J. Crowder's answer
function saveNull(o){
if(o !== null) return o;
const p = new Proxy({}, {
get(target, prop, receiver) {
return () => p;
},
});
return p;
}
const a = " abc"; // could be null
const b = a.toUpperCase().trim(); // could crash
const c = a ? a.toUpperCase.trim() : null; // approach 1
const d = a && a.toUpperCase().trim(); // approach 2
const e = saveNull(a).toUpperCase().trim(); // approach 3
我发现最后一种方法更具可读性和趣味性。您可以在ES2015及更高版本中使用a来实现这一点;在ES5及以下版本中,您无法执行此操作
如果您真的希望每个可能的属性都返回这个神奇的函数,那么它相当简单:
constobj={};
常数魔法=()=>1;
常数p=新代理(obj{
获取(目标、道具、接受者){
回归魔法;
}
});
console.log(p.foo());//返回1
console.log(p.bar());//返回1
console.log(p.baz());//返回1
您为什么要这样做?我对此表示怀疑…..听起来您需要一个代理,但听起来您可能需要告诉我们@Kristoftd我添加了一个解释,说明我为什么要这样做。@Medtleukiliuly-不处理任何可能的随机属性名称。这在ES5中是不可能的,所以它不能是多填充的。