编辑这不是重复的b / c我不能使用其限制的setter b / c,这些不是在运行时之前没有定义的“动态”属性。我正在寻找与vb.net支持的相同的东西......带参数的属性设置器。在这种情况下,你会得到额外的参数进入属性的setter,但是属性是在运行时定义的(是的,我猜它是一个元属性)。我知道这样做不会有效,所以正在寻找这种模仿。
如果有帮助,我可以通过ES6使用任何解决方案,但我不必这样做。这不是ES6问题。
语言中是否有任何方法可以模仿我所寻求的调用约定?
var myClass = new MyClass();
myClass.Setting('mysettingname') = 4;
我知道我可以做myClass.Setting['mysettingname'] = 4;
之类的事情,但我需要在设置时运行代码。这就是皱纹。
ES5.1 JavaScript Setter不是解决方案。如果向setter添加参数,它将不会运行:
MyClass = function(){
set setting(name, value) { // error b/c of name
// code that needs to run
}
};
在php中他们有魔术吸气剂和制定者,如下所示:
public function __set($key, $value) {
// assign value for key UserID to _userID property
}
public function __get($key) {
// return value of _userID for UserID property
}
在vb.net中,他们拥有带参数的属性:
Public Property Marks(Byval index as Integer) as Integer
Get
If (index < NoofSubjects()) And index >= 0 Then
return _marks(index)
Else
Throw new Exception("Index should be in the range 0 to " & (NoofSubjects-1))
End If
End Get
Set(Byval value as Integer)
If (index < NoofSubjects()) And index >= 0 Then
_marks(index) = value
Else
Throw new Exception("Index should be in the range 0 to " & (NoofSubjects-1))
End If
End Set
End Property
答案 0 :(得分:2)
您可以使用Proxy:
class MyClass {}
const myClass = new Proxy(new MyClass, {set: (target, property, value) => {
// Do here whatever you want with property and value
console.log(`property: ${property}, value: ${value}`)
return target[property] = value
}})
myClass.mysettingname = 4
&#13;