ranhao算法笔记(2)丧心病狂之手写apply,call,bind

167 阅读1分钟

为什么这个世界需要手撕代码?

言归正传,这次带来的是不严谨的apply,call,bind 的实现。

Function.prototype.myapply = function(){
    // 我们使用 apply(this),第一个参数一定是个this或者对象吧,如果不填写的话我们默认入全局环境咯
    context = arguments[0] || window;
    // 取一个独一无二的key,防止与其他属性名字冲突。
    let key = Symbol();
    // 此处的this是我们的方法,因为调用apply的是函数。
    context[key] = this;
    // 我们执行他,并拿到结果。
    let result = context[key](arguments[1]);
    return result;
    
    
    ----------------------------------
    
    
    // 同理,我们的call和apply 的区别不就是参数的区别而已嘛?
    // 改一改
    let result = context[key](...arguments.slice(1));
    
    //最后,我们的bind就是不传参而已拉。
    return context[key]
    
    // 最后最后, 其实使用完函数应该在对象上删除掉的jav
}