在javascript对象上生成通用getter和setter

时间:2012-01-26 23:06:57

标签: javascript

可以在javascript中创建getter和setter,如

所示
Object.defineProperty
__define***__

在所有这些情况下,属性的名称是已知的。

是否可以创建通用的。

我的意思是,我有一个getter和/或setter,无论属性名称如何都会被调用。

这可能吗? 如果是这样,怎么样?

问候。

注意: 在发布问题之后我确实找到了这些。看起来目前无法作为第一个答案说明。

Is it possible to implement dynamic getters/setters in JavaScript?

Monitor All JavaScript Object Properties (magic getters and setters)

5 个答案:

答案 0 :(得分:7)

有一个非标准函数__noSuchMethod__(),它在作为函数调用非现有属性时执行。

但我认为在JavaScript中还没有找到你想要的东西。

答案 1 :(得分:3)

像我一样的旅行者:

当问题被问到时,这是不可能的,但在现有版本的EcmaScript中已经可以通过所谓的代理对象实现。点击此处了解更多信息:

答案 2 :(得分:1)

此时在标准javascript中无法使用。

答案 3 :(得分:0)

我想你应该自己处理这个问题:

if (!object.hasOwnProperty('foo')) {
  // object has a foo property, its value might be undefined

} else if (typeof object.foo != 'undefined') {
  // there is a foo property elsewhere on object's prototye chain with 
  // a value other than undefined

} else {
  // the foo property might exist on the prototype chain with
  // a value of undefined, or might not exist on the chain at all
}

答案 4 :(得分:0)

我觉得你们都在寻找像这样的东西

function getterSetter()
{
var valA;
this.set=function (propName,val)
{
if(typeof this[propName] =='function' )
{
return false;
}
this[propName]=val;
}
this.get=function (propName,val)
{
if(typeof this[propName] =='function' )
{
return false;
}
return this[propName];
}
}

这里的set和get方法是setter和getter。您可以使用以下代码进行验证。

var testObj=new getterSetter();
testObj.set('valA',10);
alert(testObj.get('valA'));

另外,检查要设置/获取的propName不是函数。