const main = {
name: '123',
testFn: function(p1,p2, ...p3){
console.log(this.name + ',1' + p1 + ',2' + p2 + ',3' + p3 )
}
}
const obj = {
name: 'hjm'
}
main.testFn.call(obj, 'aaa', 'bbb') // call,如果方法接收多个参数,而call少传了参数数量,那在方法中也来会有值。和bind不同的是,bind未传第二个参数时,接收到的是undefined(只有第二个参数会是undefined)
main.testFn.call(obj, 'aaa', 'bbb', ...[1,2,3,4,5]) // call,第一个参数是要修改为谁的this对象,后面以逗号分隔传多个参数。
main.testFn.apply(obj, ['aaa', 'bbb'], 'apply除前两个参数外的都是无效的参数') // apply,只能传两个参数,第一个参数是要修改为谁的this对象,第二个参数为数组。
main.testFn.bind(obj, 'aaa', 'bbb')() //bind,和call相同,不同的是bind返回的是一个函数,而call和apply返回是undefined
main.testFn.bind(obj, ['aaa', 'bbb'])()//bind未传第二个参数时,接收到的是undefined(只有第二个参数会是undefined)
main.testFn.bind(obj, ['aaa', 'bbb'],'vvv')()
// call和apply返回undefined,bind返回函数本身,需调用。
console.log(main.testFn.call(obj, 'aaa', 'bbb'),main.testFn.apply(obj, ['aaa', 'bbb'], 'apply除前两个参数外的都是无效的参数'),main.testFn.bind(obj, 'aaa', 'bbb'))
js改变this指向(call、apply、bind)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.bind 利用bind得到多个fn的clone版本 两个方法都是o对象来调用的,在不使用bind改变this指...
- call和apply 除了把函数内部的this绑定到第一个参数之外,最后是直接返回函数执行在ECMA规范中,我们可...
- this指向 this指向上一级调用它的对象 apply,call,bind用法 apply,call,bind都...