JavaScript原型
为什么在MDN函数中polyfills使用“if(!Array.prototype.filter)”JavaScript原型,javascript,ecmascript-6,Javascript,Ecmascript 6,为什么在MDN函数中polyfills使用“if(!Array.prototype.filter)” if(!Array.prototype.filter){ Array.prototype.filter=函数(fun/*,thisArg*/){ "严格使用",; var t=对象(本); var len=t.length>>>0; var-res=[]; var thisArg=arguments.length>=2?参数[1]:无效0; 对于(变量i=0;i
if(!Array.prototype.filter){
Array.prototype.filter=函数(fun/*,thisArg*/){
"严格使用",;
var t=对象(本);
var len=t.length>>>0;
var-res=[];
var thisArg=arguments.length>=2?参数[1]:无效0;
对于(变量i=0;i
你需要用什么
你需要用什么
如果本机方法确实存在,则polyfill不会覆盖它这就是他们检查要进行polyfill的内容是否已经存在的方式
使用该特定示例:
Array.prototype
指的是作为所有数组原型的对象。因此Array.prototype.filter
是数组继承的属性,它提供了filter
方法。通过执行if(!Array.prototype.filter)
,代码将检查该属性是否已经存在,并带有truthy值(函数引用为truthy),如果存在,则不尝试添加该属性。读取Array.prototype.filter
的值时,如果filter
在Array.prototype
上不存在,则会产生undefined
(错误值)。prototype,它告诉代码需要添加多边形填充。如果Array
类型的filter
prototype不存在。。脚本将创建它。
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;
};
}