@shaochangbin 
__defineSetter__ and __defineGetter__ can not provide key to the "set function", so we need have a closure to save the key for a key setter.
And for addition if we use Object.defineProperty rather than __defineS(G)etter__, it seems the closure also needed.