码迷,mamicode.com
首页 > 移动开发 > 详细

call apply以及各种数组方法的封装

时间:2020-03-24 12:32:48      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:构造   for   style   length   value   prot   let   obj   数组   

  Function.prototype.mycall = function() {
      const [context,...args] = arguments
      context = context||window
      context.__proto__.fn = this
      context.fn(...args)
      delete context.__proto__.xxx    //删除xxx函数  避免对象的隐式原型被污染
    }
  // 封装apply函数
    Function.prototype.myapply = function() {
      const [context,...args] = arguments
      context = context||window
      args = args|| []
      context.__proto__.fn = this
      context.fn(...args)
      delete context.__proto__.fn    //删除xxx函数  避免对象的隐式原型被污染
    }

  

// 封装push方法
    Function.prototype.mypush = function(n) {
      this[this.length] = n
      return this.length
    }

  

   // js生成对象的方法
    // 1.var obj = {} 该对象的隐式原型指向Object.prototype
    // 2.var obj = new Fn() 该对象的隐式原型指向Fn.prototype
    // 3.var obj = Object.create(参数对象) 该对象的隐式原型指向参数对象
// 模拟new
    function myNew() {
      let [Fn, ...args] = arguments
      // let obj = {}
      // obj.__proto__ = Fn.prototype    //把obj的隐式原型指向Fn的显式原型
      let obj = Object.create(Fn.prototype)
      Fn.call(obj, ...args)    //借用Fn这个构造函数 给obj添加属性
      return obj
          }

  

// 封装reduce方法
    Array.prototype.myreduce = function(cb,value) {
      if(value||value ==0){
        for(let i =0;i < this.length;i++) {
          value =  cb(value,this[i])
        }
      }else {
        for(let i = 0;i < this.legnth-1;i++){
          value = cb(i===0 ? this[i]: value , this[i+1])
        }
      }
      return value
    }

  

// foreach方法
  Array.prototype.myforeach = function(cb) {
    for(let i = 0 ;i < this.length; i++){
      cb(this[i],i,this)
    }
  }
 Array.prototype.myfilter = function() {
    let arr = []
    for(let i = 0;i < this.length ;i++) {
      if(cb(this[i]),i) {
        arr.push(this[i])
      }
    }
    return arr
  }
 Array.prototype.mymap = function() {
    let arr =[]
    for(let i =0;i < this.length; i++){
      arr.push(cb(this[i],item))
    }
    return arr
  }

 

call apply以及各种数组方法的封装

标签:构造   for   style   length   value   prot   let   obj   数组   

原文地址:https://www.cnblogs.com/388ximengpy/p/12558130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!