如何变量shadow Javascript数组?

How to variable shadow Javascript Array?

我是运行一个自调用函数,我想更改其中的 Array 对象,并且只在其范围内。

        var foo = "Foo Outer";
        (function(){
            var foo = 'Foo Inner !';
            console.log('INNER>',foo);
            // prints INNER> Foo Inner !
            var Array = {};
            var Array = Object.getPrototypeOf([]).constructor;
            Array.prototype.filter = ()=>{return "Array filter inner"}        
            console.log('INNER> array filter literal:', [1,2,3].filter(x=>x));
            // prints INNER> array filter literal:Array filter inner 
        })()
        console.log('OUTER> foo ', foo);
        // prints OUTER> foo Foo outer
        console.log('OUTER> Array filter', [1,2,3].filter(x=>x));
        // prints OUTER> Array filter Array filter inner
        // I want -> 
        // OUTER> Array Filter [1,2,3]

我如何才能仅在自调用函数的范围内改变影子数组及其方法,同时在脚本的其余部分保持相同?

因此在 javascript 中,数组通过引用传递。这意味着您总是在引用相同的“来源”。如果您在一个地方改变数组,这些更改将反映在对该数组的所有引用上。

这意味着如果您希望对影子阵列的一个版本的更改与另一个版本不同,您需要复制它并更改该副本。

看起来您在这里真正想要完成的是本机数组过滤器方法的本地猴子补丁。我相信您在这里寻找的技术是代理。使用代理,您可以拦截对本机 filter() 方法的调用并替换为您自己的方法。 ECMAScript2015 中引入了代理。 见 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

之前的回答可能与您最相关

显然答案(正如@Bergi 在评论中所写的那样)是不可能改变阴影数组)