【问题标题】:Array splice prototyping阵列拼接原型
【发布时间】:2015-05-27 13:07:03
【问题描述】:

我正在尝试在我的 NodeJS 应用程序中扩展数组拼接功能,不幸的是它不起作用,我得到了格式错误的结果。看来我的数组不是一个:

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

当我在 EggDBArray 上运行 splice 时,我没有得到 [] 而是 {}

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 }

我在这里找到了“示例”:How to extend Array.prototype.push()?

【问题讨论】:

  • 你想达到什么目的?
  • 我的“return original.apply(this,arguments);”之前的处理
  • 看起来不错。为我工作。 Chrome 控制台。
  • EggDBArray 不是数组
  • 目前你实际上正在覆盖Array.prototype.splice,这是有意的吗?

标签: javascript arrays node.js prototype


【解决方案1】:

感谢Gist,我找到了解决方案。 正如我们所看到的(在 Chrome 控制台之外),EddDBArray 不是一个数组。 现在它完美地工作了:

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

另一个关于proto的有用链接

我将它用于拼接操作之前的预处理EggDBArray

【讨论】:

    猜你喜欢
    • 2014-03-20
    • 2021-11-20
    • 1970-01-01
    • 2017-08-21
    • 2021-10-14
    • 2023-03-31
    • 2019-05-06
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多