为什么MDN函数polyfill使用“if(!Array.prototype.filter)”?
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;
};
}
您需要使用它?
答案 0 :(得分:2)
这就是他们如何检查他们是否已经存在填充的东西。
要使用该特定示例:Array.prototype
指的是作为所有数组原型的对象。所以Array.prototype.filter
是数组继承的属性,提供filter
方法。通过执行if (!Array.prototype.filter)
,代码检查该属性是否已经存在且具有真值(函数引用是真实的)并且如果它存在则不尝试添加它。如果Array.prototype.filter
上没有undefined
,那么读取filter
的值会产生Array.prototype
(假值),这会告诉添加填充所需的代码。< / p>
答案 1 :(得分:1)
您需要使用它?
如果本机方法确实存在,则polyfill不会覆盖它