第 38 题:apply、call 和 bind 是什么?哪些区别?
2021/9/5 8:05:56
本文主要是介绍第 38 题:apply、call 和 bind 是什么?哪些区别?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
三者都是改变 this 指向的 api
用法
apply:xxx.apply(this, [arg1, arg2])
call:xxx.call(this, arg1, arg2)
bind:xxx.bind(this, arg1, arg2)
区别
主要是传参方式和执行方式不同
-
apply、call 的区别:接受参数的方式不一样
-
bind:不立即执行。而 apply、call 立即执行
栗子
初始状态
let Person = function(name, age) { this.name = name; this.age = age; }; let Student = function() { this.class = 'classA'; this.run = function() { console.log(this); }; }; let student = new Student(); student.run();
可以看见这个时候打印的 this 是指向 Student 构造函数,并且和 Person 构造函数没有任何关联
使用 apply 改变 this 指向
let Person = function(name, age) { this.name = name; this.age = age; }; let Student = function() { this.class = 'classA'; this.run = function() { Person.apply(this, ['xiaoming', 20]); console.log(this); }; }; let student = new Student(); student.run();
这个时候 this 已经指向了 Person 构造函数了
使用 call 改变 this 指向
let Person = function(name, age) { this.name = name; this.age = age; }; let Student = function() { this.class = 'classA'; this.run = function() { Person.call(this, 'xiaoming', 20); console.log(this); }; }; let student = new Student(); student.run();
这个时候 this 已经指向了 Person 构造函数了
使用 bind 改变 this 指向
let ex = ''; let Person = function(name, age) { this.name = name; this.age = age; }; let Student = function() { this.class = 'classA'; this.run = function() { ex = Person.bind(this, 'xiaoming', 20); console.log(this); }; }; let student = new Student(); student.run(); ex();
使用 bind 的话,需要执行了 this 改变才会生效
总结:使用 apply、call 和 bind 确实可以改变 this 指向,但是原有对象的属性也跟着一起过去了
这篇关于第 38 题:apply、call 和 bind 是什么?哪些区别?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用