2017-08-15 40 views
0

我使用MDN docs for the Set object中描述的構造函數編寫了一些代碼。不幸的是Internet Explorer 11忽略了構造函數中的任何迭代參數。我試圖重寫構造函數(下面的代碼),但沒有運氣(Set.prototype.size返回 - 'this'不是set對象)。Internet Explorer ECMAScript的填充填充設置構造函數以允許迭代參數

var testSet = new Set([0]); 
if (testSet.size === 0) { 
    //constructor doesnt take an iterable as an argument - thanks IE 
    var oldProto = Set.prototype 
    Set = function (iterable) { 
     if (iterable) { 
      iterable.forEach(this.add.bind(this)); 
     } 
    }; 
    Set.prototype = oldProto; 
} 

有沒有辦法允許Set構造函數有一個可迭代的參數通過,仍然工作在I.E. ?我想下一個最好的選擇將是創建某種工廠方法(Set.create),它返回一個新的Set實例。

+1

你有沒有探索過使用現有的polyfills像'core-js'?這不是我真正推薦實施的東西。 – loganfsmyth

回答

2

您並未在該代碼中創建新的Set實例。如果你想覆蓋構造函數,你應該這樣做

if (new Set([0]).size === 0) { 
    //constructor doesnt take an iterable as an argument - thanks IE 
    const BuiltinSet = Set; 
    Set = function Set(iterable) { 
     const set = new BuiltinSet(); 
     if (iterable) { 
      iterable.forEach(set.add, set); 
     } 
     return set; 
    }; 
    Set.prototype = BuiltinSet.prototype; 
    Set.prototype.constructor = Set; 
}