有没有javascript相当于python的__getattr__方法?

23 javascript

在python中,您可以定义一个对象,该对象具有__getattr__(self,key)处理所有未知属性的方法,这些方法可以以编程方式解决,但在javascript中,您只能为预定义属性定义getter和setter.是否有一种通用的方式来在javascript中完成前一件事?

示例代码如下:

function X() {};
X.prototype={
  __getattr__:function(attrname) {
    return "Value for attribute '"+attrname+"'";
  }
}

x=new X()
alert(x.lskdjoau); // produces message: "Value of attribute 'lskdjoau'"
Run Code Online (Sandbox Code Playgroud)

关键点是根据属性的名称以编程方式获取属性的值.预设置属性没有帮助,因为在init期间没有信息可能请求哪些属性.

小智 43

现在,如果您的浏览器支持ES6代理功能,则可以使用.您可以在ECMAScript 6兼容性表中进行检查.

如果您有代理支持,则可以按如下方式使用它:

let handler = {
  get(target,name) {
    return `Value for attribute ${name}`
  }
}

let x = new Proxy({},handler);
console.log(x.lskdjoau); // produces message: "Value of attribute 'lskdjoau'"
Run Code Online (Sandbox Code Playgroud)

适用于chrome,firefox和node.js. 缺点:在IE中不起作用 - freakin IE.不久.


Roa*_*rth 9

可悲的是答案是否定的.请参阅Javascript中的Python的__getattr__

你有__defineGetter__,但正如你所说,你需要知道你将要访问的属性的名称.

顺便说一下,我认为你的意思是__getattr__(__getitem__适合你想要访问的东西[]).

  • @Roatin为什么!!!! JS比任何其他功能更需要它(除了人们十年来一直要求的"少吸"功能). (4认同)