为了账号安全,请及时绑定邮箱和手机立即绑定

bind 这里,可以不用fNOP函数吗?

稍微修改了代码试了一下,结果也是一样的,请问为什么polyfill写法要fNOP呢?

Function.prototype.myBind = function(_that){  var fn = this; // fn = foo  var _arguments = Array.prototype.slice.call(arguments).slice(1)  var fNOP = function(){},      fBound = function(){        console.log(this)         var that = this instanceof fn && _that ? this : _that;         var args = Array.prototype.slice.call(arguments)        var bindArgs = _arguments.concat(args)        return fn.apply(that, bindArgs)      };  fBound.prototype = new fn(); // fBound继承了fNOP的原型,也就是fn的原型,去修正返回的fBound函数的prototype对象  return fBound;}function foo(){  this.b = 100;  return this.a}var func = foo.bind({a:1})func()new func()


正在回答

1 回答

Function.prototype.myBind = function(_that){
  var fn = this; // fn = foo  
  var _arguments = Array.prototype.slice.call(arguments).slice(1)
  var fBound = function(){
      console.log(this)         
      var that = this instanceof fn && _that ? this : _that;
      var args = Array.prototype.slice.call(arguments)        
      var bindArgs = _arguments.concat(args)        
      return fn.apply(that, bindArgs)      
    };  
      fBound.prototype = new fn(); // fBound继承了fNOP的原型,也就是fn的原型,去修正返回的fBound函数的prototype对象  
      return fBound;
    }
    
    function foo(){  
      this.b = 100;  
      return this.a
    }
    var func = foo.bind({a:1})
    func() 
    new func()

上面提问的代码格式错乱了,下面这里是正确排版,没有用fNOP也可以得到一样的效果,为什么需要用fNOP函数呢?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

bind 这里,可以不用fNOP函数吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信