implement defineproperty