手写bind函数

bind用于改变this指向

Function.prototype.myBind = function(obj, ...args) {
   var self = this
   var fn = function() {
       var _this = this instanceof self ? this : obj
       return self.apply(_this, args.concat([...arguments]))
   }
   fn.prototype = this.prototype
   return fn
}

测试一下

function foo(name) {
    this.name = name
}

var obj = {}

//上下文 功能  done
var bar = foo.myBind(obj)
bar("jack")
console.log(obj.name) //'jack'

// 参数 功能   done
var tar = foo.myBind(obj, "rose")
tar()
console.log(obj.name) //'rose'
// new 功能   error
var alice = new bar("alice")
console.log(obj.name) //alice   obj name should be 'jack'
console.log(alice.name)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容