创建扩展本机数组的集合有什么危险?

时间:2017-03-31 12:31:05

标签: javascript arrays oop

我根据此article创建了一个集合。我发现它运行在chrome,firefox和ie9 +上。 我假设有些东西不起作用或者可能,Windows 10的ie9模拟器并没有给我真实的图片。

此扩展程序可能出现什么问题?

测试代码:

<script>
    function Collection() {
        var collection = Object.create( Array.prototype );

        collection = (Array.apply( collection, arguments ) || collection);


        return collection;
    }

    Collection.prototype =  Object.create(Array.prototype);

    var collection = new Collection();

    collection[0] = 1;

    console.log(collection[0]);
</script>

1 个答案:

答案 0 :(得分:1)

查看http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/

特别是

var collection = Object.create(Array.prototype);

创建一个继承自Array.prototype而不是Collection.prototype的对象。它会创建一个对象,而不是一个数组。

collection = (Array.apply( collection, arguments ) …

Array忽略其this值。并创建Array个实例,而不是Collection个实例。

… || collection)

这是毫无意义的,因为Array永远不会返回假值,所以collection总是被忽略。

  

此扩展程序可能出现什么问题?

它创建Array s,而不是Collection s。根本没有扩展。尝试在Collection.prototype放置一些方法并调用它们。