zoukankan      html  css  js  c++  java
  • 改变this指向的方法?call,apply,bind三者区别?自己实现三个方法?

    call,apply,bind为改变this指向的方法

    共同点:

      第一个参数都为改变this的指针,若第一个参数为null或者undifined,则this指向默认window

    区别:

      call:第二个参数开始都是实参,使用该方法自动执行函数

      apply:第二个参数是一个数组格式的参数列表,使用该方法自动执行函数

      bind:第二个参数开始都是实参,该方法使用后返回一个函数,需要自己调用执行

    实现call方法:

    Function.prototype.myCall = function (context) {
      if(context == null){
        context = window;
      }
      context.fn = this;
      const arg = [...arguments].slice(1);
      const result = context.fn(...arg);
      delete context.fn;
      return result;
    }    

    实现apply方法:

    Function.prototype.myApply = function (context, arr) {
      if(context == null) {
        context = window;
      }
      context.fn = this;
      let result;
      if(arr == null){
        result = context.fn();
      }else {
        result = context.fn(...arr);
      }
      delete context.fn;
      return result;
    }

    实现bind方法:

    Function.prototype.myBind = function (context) {
      if(context == null){
        context = window;
      }
      const arg = [...arguments].slice(1);
      const _this = this;
      
      return function Fn() {
        if(this instanceof Fn) {
          return _this.call(this, ...arg);
        }
        return _this.call(context, ...arg);
      }
    }

      

  • 相关阅读:
    Ionic
    图片破碎 效果 修正
    去掉浏览器右侧动滚条宽度对页面的影响
    ng 依赖注入
    ng 通过factory方法来创建一个心跳服务
    ng 自定义服务
    ng $http 和远程服务器通信的一个服务。
    ng $interval(周期性定时器) $timeout(延迟定时器)
    ng $scope与$rootScope的关系
    函数重载
  • 原文地址:https://www.cnblogs.com/cqweb/p/14167423.html
Copyright © 2011-2022 走看看