2012-01-26 74 views
2

它可以创建在JavaScript getter和setter设定器如图生成通用getter和上javascript对象

Object.defineProperty 
__define***__ 

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

是否有可能创建一个通用的。

通过这个我的意思是,我有一个getter和或setter,它被称为不考虑属性名称。

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

关于。

注: 我在发布问题后发现了这些问题。看起来目前不可能,因为第一个答案表明。

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

Monitor All JavaScript Object Properties (magic getters and setters)

回答

7

有当非现有属性作为函数调用时执行的非标准功能__noSuchMethod__()

但我不认为你确实在寻找JavaScript(尚)。

+0

感谢。这是我也意识到的。看起来我必须以旧函数的方式来执行它,直到它被实现。 – ritcoder 2012-01-27 08:46:59

1

此时不能在标准javascript中使用。

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 
} 
+2

我不是真的在追随。如果我调用obj.foo并且foo未定义,那么将如何调用代码?我的意思是一个完整的工作示例将不胜感激。 – ritcoder 2012-01-27 08:15:18

+0

我的意思是说其他人说“你不能这样做”,所以我只是补充说,你应该在调用之前检查obj.foo是否存在。以上是如何做到这一点的工作代码,但它不会告诉你'foo'是否可以调用。有一个关于如何确定什么是可调用上的[是功能]讨论(http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/13b14565817a35ba/b9e22a812194a9f3?hl=en&lnk=gst&q =为+上comp.lang.javascript可调用#b9e22a812194a9f3)线程。 – RobG 2012-01-30 00:13:05

+0

好的。我想要做的是真正陷阱缺少的属性的电话和举报。这是我正在进行的一个项目的一部分。因此,我实际上并不知道将会调用哪些属性。 – ritcoder 2012-02-17 14:28:19

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]; 
} 
} 

这里集合寻找的东西和获得方法是setter和getter。你可以用下面的代码来验证它。

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

此外,检查propName设置/获取不是一个函数。

+0

的想法是要能够知道什么时候一个不存在的属性或方法做出请求,并执行一些自定义的功能 - 就像动态的方式在C#中工作。 – ritcoder 2012-10-16 01:40:48