「JavaScript」 基础知识要点及常考面试题(五)

这一部分主要介绍我在面试中遇到的问题

reduce 函数的理解,手写一个reduce函数

Arrray.reduce( ( acc, currentValue, currentIndex, arr) { })
acc: 叠加的值
currentValue/currentIndex: 当前的值和索引
arr:数组本身

Array.prototype.myreduce = function (callback, pre) {
    for (let i = 0; i < this.length; i ++) {
        if (!pre) {
          pre = callback(this[i], this[i+1], i, this)
          i++
       } else {
          pre = callback(pre, this[i], i, this)
      }
    }
   return pre
}

如何实现一个new (手写)

********************
new func(xxx)
********************
function _new(fn, ...arg) {
  let obj = Object.create(fn,prototype)
  fn.call(obj, ...arg)
  let result = fn()
  return Object.prototype.toString.call(result) == '[object object]' ? result : obj
}

手写实现apply, call

function _call(context) {
 context = context ? Object(context) : window // 实现3
    // 模拟传入的对象中有一个调用该对象的函数
    // 作用是为了改变函数的作用域指向该对象
    context.fn = this
    
    //接收参数,若有。
    let args = [...arguments].slice(1) // 第0个为this
    let result = context.fn(...args) // 执行fn
    delete context.fn //删除fn
    
    return result
}

https://juejin.im/post/5c7004caf265da2dcc7ff3d3

手写ajax实现

function ajax() {
    let request = new XMLHttpRequest()
    request.open('get', 'https://www.google.com')
    request.onreadystatechange = () => {
        if (request.readyState === 4) {
            if (request.status >= 200 && request.status <300) {
                let string = request.responseText
                let object = JSON.parse(string)
            }
        }
    }
    request.send()

其中 readyState的几个状态可以了解一下


image.png

你可能感兴趣的:(「JavaScript」 基础知识要点及常考面试题(五))