2017-01-02 92 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

這就是他們如何檢查,看看是否他們polyfilling的東西已經存在。

要使用該特定示例:Array.prototype指的是作爲所有數組原型的對象。因此Array.prototype.filter是數組繼承的屬性,它提供了filter方法。通過執行if (!Array.prototype.filter),代碼將檢查該屬性是否已經存在一個真值(函數引用是truthy),如果它存在,則不會嘗試添加它。如果在Array.prototype上不存在filter,則讀取Array.prototype.filter的值將產生undefined(虛假值),該值指示需要添加填充的代碼。

1

你需要什麼使用它?

如果本地方法確實存在的填充工具不會覆蓋它