美文网首页js
javascript中的bind

javascript中的bind

作者: CRUD_科科 | 来源:发表于2019-06-24 15:47 被阅读0次
    // bind 特点
    // 1) 可以改变this指向
    // 2) 返回一个绑定后的函数(高阶函数)
    // 3) 如果绑定函数被new了,那么this就是当前函数的实例
    // 4) new出来的结果,可以找到原有类的原型
    
    Function.prototype.bind = function (context) {
      let that = this;
      let bindArgs = Array.prototype.slice.call(arguments, 1);  // arguments没有slice方法
      function fBind() {
        let args = Array.prototype.slice.call(arguments);
        return that.apply(this instanceof fBind ? this : context, bindArgs.concat(args));
      }
      // fBind.prototype = Object.create(this.prototype);
      fBind.prototype.__proto__ = this.prototype;
      return fBind;
    }
    
    let obj = {
      name: 'yang'
    }
    
    function fn(age, sex) {
      console.log(this.name + age + sex);
    }
    fn.prototype.flag = '人类'
    let fn1 = fn.bind(obj, 27);
    // fn1('男');
    let fn2 = new fn1('男');
    console.log(fn2.flag)
    
    // 手写Object.create方法
    function create(params) {
      let fn = function() {}
      fn.prototype = Animal.prototype;
      return new fn;
    }
    

    相关文章

      网友评论

        本文标题:javascript中的bind

        本文链接:https://www.haomeiwen.com/subject/pdonqctx.html