2017-01-02 5 views
3

なぜMDN関数でpolyfillsは "if(!Array.prototype.filter)"を使用しますか?JavaScriptプロトタイプ

if (!Array.prototype.filter) { 
    Array.prototype.filter = function(fun/*, thisArg*/) { 
    'use strict'; 

    var t = Object(this); 
    var len = t.length >>> 0;  
    var res = []; 
    var thisArg = arguments.length >= 2 ? arguments[1] : void 0; 
    for (var i = 0; i < len; i++) { 
     if (i in t) { 
     var val = t[i]; 

     if (fun.call(thisArg, val, i, t)) { 
      res.push(val); 
     } 
     } 
    } 

    return res; 
    }; 
} 

何が必要ですか?

+1

'array'型の' filter'プロトタイプが存在しない場合、スクリプトはそれを作成します。 –

答えて

2

上書きしませんポリフィルを存在しない場合。

この特定の例を使用するには、Array.prototypeは、すべての配列のプロトタイプであるオブジェクトを指します。したがってArray.prototype.filterは、filterメソッドを提供する配列が継承するプロパティです。 if (!Array.prototype.filter)を実行することにより、コードは、そのプロパティが真理値(関数参照は真実である)が既に存在するかどうかをチェックし、存在する場合はそれを追加しようとしません。 Array.prototype.filterの値を読むとfilterArray.prototypeに存在しない場合にundefined(偽値)が得られます。これはコードにポリフィルを追加する必要があることを示します。

1

何が必要ですか?

ネイティブメソッドは、彼らがpolyfillingしている事は既に存在しているかどうかを確認する方法を説明します

関連する問題