JavaScript原型

时间:2017-01-02 09:29:42

标签: javascript ecmascript-6

为什么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;
  };
}

您需要使用它?

2 个答案:

答案 0 :(得分:2)

这就是他们如何检查他们是否已经存在填充的东西。

要使用该特定示例:Array.prototype指的是作为所有数组原型的对象。所以Array.prototype.filter是数组继承的属性,提供filter方法。通过执行if (!Array.prototype.filter),代码检查该属性是否已经存在且具有真值(函数引用是真实的)并且如果它存在则不尝试添加它。如果Array.prototype.filter上没有undefined,那么读取filter的值会产生Array.prototype(假值),这会告诉添加填充所需的代码。< / p>

答案 1 :(得分:1)

  

您需要使用它?

如果本机方法确实存在,则polyfill不会覆盖它