JSFiddle - React, Tailwind, and code Playground

JavaScript

var A = function(){
    var __array = []; //array[x] map __array
    var _array = []; //A.array map _array

    Object.defineProperty(this,'array', {//A.array -> _array
        get: function() {             
            if( _array.length != __array.length ){ //if a new item is added                
                for( var i = 0 ; i < _array.length ; ++i ){//traversal to set getter and setter
                    var prop = Object.getOwnPropertyDescriptor(_array,i)
                    if( prop && prop.value ){     
                        //__array
                        __array[i] = _array[i]
                        //_array
                        ;(function(i){//use a closeure to preserve i
                            Object.defineProperty(_array,i,{
                                get: function(){
                                    //do some thing here
                                    return __array[i]
                                },
                                set: function(val){
                                    __array[i] = val
                                }
                            })
                        })(i)
                    }
                }
            }
            return _array; 
        },
        set: function(value) { 
            //__array
            __array = value ;
            //_array
            value.forEach(function(element, index ,array){
                Object.defineProperty(_array,index,{
                    get: function(){
                        //do something here
                        return __array[index]
                    },
                    set: function(val){
                        __array[index] = val
                    }
                })
            })
        }
    })
}
var a = new A;
a.array = [3,5,8]
a.array[4] = 9
document.write('1:',a.array[1],'  2:',a.array[4])