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

    慢慢来,比较快!基础要牢,根基要稳!向大佬致敬!
  • 相关阅读:
    Additional Color Tables
    How to make a non-symmetric color pallet around zero
    【cl】cmd相关命令
    【cl】oracle之Sequence
    常用命令之ps
    卸载oracle
    oracle—无法启动
    oracle 导入数据
    proc文件系统漫谈
    GStreamer插件分类
  • 原文地址:https://www.cnblogs.com/rookie123/p/14364307.html
Copyright © 2011-2022 走看看