长话短说:我的情况是我喜欢PHP式的getter,但是在JavaScript中.
我的JavaScript只在Firefox中运行,因此我可以使用Mozilla特定的JS.
我可以找到制作JS getter的唯一方法是需要指定它的名称,但是我想为所有可能的名称定义一个getter .我不确定这是否可行,但我非常想知道.
在PHP中,您可以使用"魔术" __call功能检测方法何时被调用,即使它不存在.
public function __call($methodName, $args)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
您可以调用任何方法,并将名称和参数传递给此魔法catch-all.
在JavaScript中是否有类似的技术允许调用任何方法,即使它实际上不存在于对象上?
var foo = (function () {
return {
__call: function (name, args) { // NOT REAL CODE
alert(name); // "nonExistent"
}
}
}());
foo.nonExistent();
Run Code Online (Sandbox Code Playgroud) 在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期间没有信息可能请求哪些属性.