关于Array中的every方法中求解释解决思路

关于Array中的every方法中求解释

            if (!Array.prototype.every)
            {
              Array.prototype.every = function(fun /*, thisp*/) //两个参数,有一个叫thisp的被注释了
              {
                var len = this.length; //获取函数形参个数存为len
              //判断是否为函数类型,不是就创建一个报错类型提示
                if (typeof fun != "function")
                  throw new TypeError();
   
                var thisp = arguments[1]; //把刚刚注释掉的thisp作为形参第二个。
                for (var i = 0; i < len; i++)  //按照形参个数依次循环0和1
                {
                   //这边的 i in this 没理解。。。还有下面回调中为什么要有this[i],i,this?
                  if (i in this &&
                      !fun.call(thisp, this[i], i, this))
                    return false;
                }
            
                return true;
              };
            }


有一段这个不太懂
                  if (i in this &&
                      !fun.call(thisp, this[i], i, this))
                    return false;
                }

------解决思路----------------------
       var $a = new Array();
       $a[3]=7;


function do1(val,key,obj){

}

------解决思路----------------------
执行fun后如果有一个返回false则返回false

------解决思路----------------------
every   =  批量检查。确保每个值都合格.
执行过程 : 遍历数组,把每个值丢进 func 内 ,func返回一个布尔值,如果是true就继续遍历到完,结果你会得到true, 全部合格啦
如果遍历到一半有一个false,那么就中断,结果你会得到 false . 有不合格的值。