1. 程式人生 > >javaScript Object之defineProperty實現getter和setter

javaScript Object之defineProperty實現getter和setter

 var setGetAndSet = function(obj,key){
                        var initVlaue = obj[key]
                        Object.defineProperty(obj,key,{
                            get:function(){
                                console.log('get')
                                return initVlaue
                            },
                            set:function(val){
                                initVlaue = val;
                            },
                        })
                    }
                    var watch = function(obj){
                        var newObj = {};
                        for(var key in obj){
                            setGetAndSet(obj,key)
                        }
                        return newObj
                    }
                    var obj = {
                        a:1
                    };
                    watch(obj)

Object.defineProperty() 方法設定屬性時,屬性不能同時宣告訪問器屬性( set 和 get )和 writable 或者 value 屬性。 意思就是,某個屬性設定了 writable 或者 value 屬性,那麼這個屬性就不能宣告 get 和 set 了,反之亦然。