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])