var obj = {}
obj.__setitem__ = function(key, value){
this[key] = value * value
}
obj.x = 2 // 4
obj.y = 3 // 9
JavaScript doesn't have __setitem__ and this example obviously doesn't work.
In python __setitem__ works like:
class CustomDict(dict):
def __setitem__(self, key, value):
super(CustomDict, self).__setitem__(key, value * value)
d = CustomDict()
d['x'] = 2 # 4
d['y'] = 3 # 9
Is it possible to implement __setitem__ behavior in JavaScript? All tricky workarounds would be helpful.
No, but there are plans for supporting a similar feature in JavaScript 2. The following object literal syntax has been suggested on Mozilla bug 312116 and it seems that it might be how it will be done for object literals:
({
get * (property) {
// handle property gets here
}
})
I'm assuming set would also be supported (as set * (property, value) {...}
).