zoukankan      html  css  js  c++  java
  • 手写call方法

    关键字: call, Function.prototype.call
    自己来实现一个call方法。
    语法:fn.call([context],[arg1]....);

    call干了些啥?

    1. 绑定this到第一个实参
    2. 执行函数并返回结果
    (function(){
      function call(context){
        // this => fn当前要操作的函数
        // 列如fn.call()
        context.$fn = this;
        let resutl,args = [];
        //处理余下参数
        for (let i = 1; i < arguments.length; ++i) {
          args.push(arguments[i]);
        }
        result = context.$fn(...args);
        // 用完后就删除
        delete context.$fn;
        return result;
      }
      // 扩展到Function原型上去
      Function.prototype.mycall = call;
    })();
    
    // 00-------------------------测试代码--------------------
    let obj = {
      name:'OBJ'
    }
    window.name = "WINDOW"
    function fn(){
      console.log(this.name);
    }
    fn(); // => this:window 
    // 使用自己实现的call=>mycall
    fn.mycall(obj) // => this:obj
    /**
    	WINDOW
    	OBJ
    */
    

    以上实现的缺点:

    • 不能接受基本类型的值

    • 没有处理不传入第一个参数,或者传入第一个参数为null或者undefined

    慢慢来,比较快!基础要牢,根基要稳!向大佬致敬!
  • 相关阅读:
    join_tab计算代价
    outer join test
    突然觉得mysql优化器蛮简单
    将数据库字段从float修改为decimal
    小米初体验
    简述安装android开发环境
    Rust语言:安全地并发
    awk里的各种坑
    ubuntu下使用C语言开发一个cgi程序
    Ubuntu下安装和配置Apache2
  • 原文地址:https://www.cnblogs.com/rookie123/p/14364307.html
Copyright © 2011-2022 走看看