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

你需要什么使用它?

如果本地方法确实存在的填充工具不会覆盖它