/**
 * 转换后的可以监控对象
 * 添加了设置和移除字段的两个能发送数据更新的方法。
 */ namespace drunk . observable { /**
     * 可监控JSON对象的声明
     */ export interface IObservableObject { [ name ] : any ; __observer__ ? : Observer ; $set ? ( name , value ) : void ; $remove ? ( name ) : void ; } param data param name export function $set ( data , name , value ) { var descriptor = Object . getOwnPropertyDescriptor ( data , name ) ; if ( ! descriptor || ( ! descriptor . get && ! descriptor . set ) ) { var oldValue = data [ name ] ; observable . observe ( data , name , value ) ; if ( oldValue !== value ) { notify ( data ) ; } } else { data [ name ] = value ; } } param data param name export function $remove ( data , name ) { if ( ! data . hasOwnProperty ( name ) ) { return ; } delete data [ name ] ; notify ( data ) ; } /**
     * 对象转换成observable后指向的原型对象
     */ export var ObservableObjectPrototype = { } ; Object . defineProperties ( ObservableObjectPrototype , { param name param value $set : { value : function setObservableObjectProperty ( name , value ) { $set ( this , name , value ) ; } } , param name $remove : { value : function removeObservableObjectProperty ( name ) { $remove ( this , name ) ; } } } ) ; }