0

I'm trying to extends Array splice function in my NodeJS app, unfortunately it doesn't work, I get malformed result. It seems my array isn't one :

var EggDBArray = function(){
}
EggDBArray.prototype = Array.prototype;
EggDBArray.prototype.splice=(function(){
    var original = Array.prototype.splice;
    return function() {
        return original.apply(this,arguments);
    };
})();

When I run splice on a EggDBArray, I dont get [] but {}

console.log(myArray);

{ '0': { FIELD: 'a', FIELD_1: 'b', FIELD_2: 'c' },
  '1': { FIELD: 'd', FIELD_1: 'e', FIELD_2: 'f' },
  '2': { FIELD: 'g', FIELD_1: 'h', FIELD_2: 'i' },
  '3': { FIELD: 'j', FIELD_1: 'k', FIELD_2: 'l' },
  '4': { FIELD: 'm', FIELD_1: 'n', FIELD_2: 'o' },
  '5': { FIELD: 'o', FIELD_1: 'p', FIELD_2: 'q' },
  '6': { FIELD: 'u', FIELD_1: 'v', FIELD_2: 'w' },
  '7': { FIELD: 'r', FIELD_1: 's', FIELD_2: 't' },
  '8': { FIELD: 'x', FIELD_1: 'y', FIELD_2: 'z' },
  '9': { FIELD: 'a', FIELD_1: 'b', FIELD_2: 'c' },
  '10': { FIELD: 'd', FIELD_1: 'e', FIELD_2: 'f' },
  '11': { FIELD: 'm', FIELD_1: 'n', FIELD_2: 'o' },
  '12': { FIELD: 'o', FIELD_1: 'p', FIELD_2: 'q' },
  '13': { FIELD: 'r', FIELD_1: 's', FIELD_2: 't' },
  '14': { FIELD: 'u', FIELD_1: 'v', FIELD_2: 'w' },
  '15': { FIELD: 'x', FIELD_1: 'y', FIELD_2: 'z' },
  '16': { FIELD: 'g', FIELD_1: 'h', FIELD_2: 'i' },
  '17': { FIELD: 'j', FIELD_1: 'k', FIELD_2: 'l' },
  '18': { FIELD: 'a', FIELD_1: 'b', FIELD_2: 'c' },
  '19': { FIELD: 'd', FIELD_1: 'e', FIELD_2: 'f' },
  '20': { FIELD: 'g', FIELD_1: 'h', FIELD_2: 'i' },
  '21': { FIELD: 'j', FIELD_1: 'k', FIELD_2: 'l' },
  '22': { FIELD: 'm', FIELD_1: 'n', FIELD_2: 'o' },
  '23': { FIELD: 'o', FIELD_1: 'p', FIELD_2: 'q' },
  '24': { FIELD: 'r', FIELD_1: 's', FIELD_2: 't' },
  '25': { FIELD: 'u', FIELD_1: 'v', FIELD_2: 'w' },
  '26': { FIELD: 'x', FIELD_1: 'y', FIELD_2: 'z' },
  length: 27 }

I found "example" here : How to extend Array.prototype.push()?

Community
  • 1
  • 1
Lombric
  • 830
  • 2
  • 11
  • 23

1 Answers1

1

Thanks to this Gist, I found a solution. As we saw (out of Chrome console) EddDBArray wasn't an Array. Now it works perfectly :

var array = [];
array.proto = Array.prototype;
array.proto.splice=(function(){
    var original = Array.prototype.splice;
    return function() {
        //Here I can do everything !!!
        return original.apply(this,arguments);
    };
})();

var EggDBArray = function(){
    var arr = [];
    arr.__proto__ = array.proto;
    return arr;
}

module.exports = EggDBArray

An other usefull link about proto

I use it for pre-processing before splice action EggDBArray

Community
  • 1
  • 1
Lombric
  • 830
  • 2
  • 11
  • 23