moyahuang / 2020Flag

2020年莫莫哒要疯狂立flag!然后疯狂拔flag!
https://moyahuang.github.io/2020Flag/
0 stars 2 forks source link

手写代码合集 #11

Open moyahuang opened 4 years ago

moyahuang commented 4 years ago

call

Function.prototype.myCall = function () {
    if (typeof this !== 'function') {
        throw 'caller is not a function'
    }
    const othis = arguments[0] || window
    othis._fn = this // 获取方法
    const args = [...arguments].slice(1) // 获取参数
    const res = othis._fn(...args) // 调用方法
    // Reflect.deleteProperty(othis, '_fn') // 恢复现场 不过有必要吗??
    return res
}

延伸学习:Reflect

apply

改造上方即可

bind

fn.bind(target[,...args])可以改变fn的this指向,返回一个新的函数。 注意:

instanceof

function myInstanceof(left, right){
    let left = Object.getPrototypeOf(left)
    let right = right.prototype
    while(left) {
       if(left === null) return false
       if(left === right) return true
       left = Object.getPrototypeOf(left)
    }
}

节流

节流是指在连续的触发事件中,间隔固定interval触发

#### 数组去重
- 1. Set
```javascript
function unique(arr) {
    return [...new Set(arr)]
}