call方法:数组
语法:call(thisObj,'',''........)
定义:调用一个对象的一个方法,以另外一个对象替换当前对象
说明:call方法能够用来代替另外一个对象调用一个方法。call方法可将一个函数的对象上下文初始的上下文改变为由thisObj指定的新对象,若是没有提供thisObj参数,那么global对象被用作thisObj
apply方法:浏览器
语法:apply(thisObj,['','',''....])
定义:应用某一个对象的方法,用另外一个对象替换当前对象
若是argArray不是一个有效的数组或者不是arguments对象,那么将致使一个TypeError.若是没有提供argArray和thisObj任何一个参数,那么Global对象将用作thisObj,而且没法被传递任何参数
相同之处:app
1、都是用来改变函数的this对象的指向 2、第一个参数都是this要指向的对象 3、均可以利用后续参数传参 不一样之处: 一、call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,所以后面须要加上()来进行调用才能够
案例一:bind与call、apply的区别函数
var a={ name:'阿姨请别把您闺女介绍给我', sex:'男', age:'24', say:function(){ console.log(this.name+',今年'+this.age+'岁,性别'+this.sex) } } var b={ name:'就要把闺女介绍给你', sex:'女', age:'18' } a.say();//阿姨请别把您闺女介绍给我,今年24岁了,性别男 那么咱们想一下如何让b用say的方法显示数据呢? 用call方法:a.say.call(b) 用apply方法:a.say.apply(b) 用bind方法:a.say.bind(b)()
案例二:call与apply的区别this
var a={ name:'阿姨请不要把您闺女介绍给我', sex:'男', age:'18', say:function(school,grade){ console.log(this.name+'性别'+this.sex+'年龄'+this.age+school+grade) } } var b={ name:'就喜欢把闺女介绍给你', sex:'女', age:'18' } 如今咱们看say方法中多了两个参数,咱们经过call和apply的参数进行传参 用call方法:a.say.call(b,'清华','三年级') 用apply方法:a.say.apply(b,['清华','六年级']) call后面的参数与say方法中是一一对应的,而apply第二个参数是一个数组 用bind方法:a.say.bind(b,'清华','三年级') 可是因为bind返回的仍然是一个函数,因此咱们能够在调用的时候在进行传参 a.say.bind(b)('清华','三年级')
if(!Function.prototype.bind){ Function.prototype.bind=function(obj){ var This=this; var args=arguments; return function(){ This.apply(obj,Array.prototype.slice.call(args,1)) } } }
注:还有一些不完善的部分,还会持续更新。显凑活着看!加油大家都是最棒的。么么哒!!! 另外大神能够指点不足之处spa