这一部分主要介绍我在面试中遇到的问题
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的几个状态可以了解一下