2017-03-31 67 views
1

我創建了一個基於這個article的集合。我發現它運行在chrome,firefox和ie9 +上。 我認爲有些事情不會起作用,或者,ie10模擬器對於Windows 10並不能給我真實的圖像。創建擴展本地數組的集合有什麼危險?

這個擴展會出現什麼問題?

測試代碼:

<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

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

特別地,

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

創建並從Array.prototypeCollection.prototype繼承的對象。它創建一個對象,而不是一個數組。

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

Array忽略其this值。並創建一個Array實例,而不是一個Collection之一。

… || collection) 

這是毫無意義的,因爲Array永遠沒有返回falsy值,所以collection簡直就是總是被忽略。

這個擴展會出現什麼問題?

它創建Array s,而不是Collection s。根本沒有擴展。嘗試在Collection.prototype上添加一些方法並調用它們。

+0

另一個重點:'collection.push('hello'); collection.length = 0;集合[0]; //'你好'。 – Kaiido

+0

@Kaiido當它是一個對象而不是數組時,是的。 – Bergi