【问题标题】:How to override a method of a specific array?如何覆盖特定数组的方法?
【发布时间】:2012-06-14 15:08:25
【问题描述】:

我需要重写一个特定数组的方法,而不是每个数组,只是一个对象,它需要像普通数组一样工作,就像这样:

var arr1 = [];
var arr2 = [];

overrideThatWay(arr1);

arr1.push(2); //invoke overrided method
arr2.push(2); //invoke regular method

for(var a1 in arr1){
//act like an array, dont list the overrided methods
}

【问题讨论】:

    标签: javascript


    【解决方案1】:
    arr1.push = function (item) {
    // "overloaded" function
    }
    

    【讨论】:

    • 但它会列在for循环中:/
    • @melanke:那是因为你使用了错误的循环类型。如果你只想要数字索引,你应该使用for 语句。 for-in 语句不适合 JavaScript 中基于索引的迭代。
    • 好吧,但我还是希望能够使用它,因为它是一个 API,我想保持这种兼容性
    • 您的 API 错误。不要使用for .. in array 来迭代数组。这不是你应该保持的“兼容性”。
    【解决方案2】:

    也许是这样,但我不知道其中的含义:

    Object.defineProperty(arr1, "push", {
              enumerable: false
            , configurable: true
            , writable: false
            , value: function(prop) {
                        //do something
                    }
    
    });
    

    【讨论】:

    • 我在覆盖 slice 方法时遇到了麻烦,但 push 没问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多