<script>
let obj={
name:'qwe',
fn(){
console.log(this.name)
console.log(...arguments)
}
}
let obj2={
name:'zxc'
}
//封装call
Function.prototype.myCall=function(that,...argu){
that=that||window
var fnName=Symbol(this.name)
that[fnName]=this;
let res=that[fnName](...argu);
delete that[fnName]
}
// obj.fn.myCall(obj2,1,2,3)
//apply
Function.prototype.myApply=function(that,argu){
that=that||window
fnName=Symbol(this.name)
that[fnName]=this
that[fnName](...argu)
delete that[fnName]
}
// obj.fn.myApply(obj2,[1,2,3])
//bind
Function.prototype.myBind=function(that,...argu){
that=that||window
let _self=this
return function(){
_self.myApply(that,argu.concat(...arguments))
}
}
let fn2=obj.fn.myBind(obj2,1,4,5)
fn2()
</script>
封装call,apply,bind
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- call方法 首先要了解call方法,在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充...
- 1、单对象编程:聚焦点"命名空间"的使用 2、bind()/call()/apply();的区别: (1).三者...
- 我们都知道call apply bind都可以改变函数调用的this指向。那么它们三者有什么区别,什么时候该用哪个...
- 1, 首先call()、apply()、bind() 都是用来重定义 this 这个对象的 例子1: <!DOCT...
- apply、call、bind apply call借用他人的函数方法 网上文章虽多,大多复制粘贴,且晦涩难懂,我...