【笔记】call,apply,bind的区别

1,call()、apply()、bind() 都是用来重定义 this 这个对象的!

  如:

  

  obj.myFun.call(db);    //德玛年龄99

    obj.myFun.apply(db);    //德玛年龄99

    obj.myFun.bind(db)();   //德玛年龄99

  以上出了bind 方法后面多了个 () 外 ,结果返回都一致!
  由此得出结论,bing 返回的是一个新的函数,你必须调用它才会被执行
 
  2,对比call 、bind 、 apply 传参情况下
  
  

  obj.myFun.call(db,'成都','上海');     //德玛 年龄 99  来自 成都去往上海

  obj.myFun.apply(db,['成都','上海']);        //德玛 年龄 99  来自 成都去往上海  

  obj.myFun.bind(db,'成都','上海')();         //德玛 年龄 99  来自 成都去往上海

    obj.myFun.bind(db,['成都','上海'])();   //德玛 年龄 99  来自 成都,上海去往undefined

  

   微妙的差距!
  从上面四个结果不难看出
    call 、bind 、 apply 这三个函数的第一个参数都是this指向的对象,第二个参数差别就来了:
    call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面  obj.myFun.call(db,'成都', ... ,'string' );
    apply的所有参数都必须放在一个数组里面传进去  obj.myFun.apply(db,['成都', ..., 'string' ]);
    bind除了返回是函数以外,它 的参数和call 一样。
    
    当然,三者的参数不限定是string类型,允许是各种类型,包括函数 、 object 等等!

本文纯属转载,以便于今后查询,原文链接:

https://www.cnblogs.com/Shd-Study/archive/2017/03/16/6560808.html

### 黑马程序员 JavaScript 学习笔记与教程 #### 关于JavaScript学习资料概述 对于希望深入理解并掌握JavaScript编程语言的学习者来说,选择合适的资源至关重要。黑马程序员提供了丰富的在线课程和文档来帮助学生全面了解这门强大的脚本语言。 #### 初级阶段:基础知识入门 针对初学者,推荐从基础概念入手,例如变量声明、数据类型以及控制结构等内容[^1]。通过这些初步的知识积累,可以建立起对JavaScript核心特性的认识,并为进一步探索打下坚实的基础。 #### 中级阶段:DOM操作与事件处理 当掌握了基本语法之后,下一步应该关注如何利用JavaScript实现页面交互功能。这部分内容涵盖了HTML文档对象模型(DOM)的操作技巧及其相关联的各种事件机制[^2]。具体而言,学会监听用户的输入行为(如点击按钮),并通过编写相应的回调函数响应特定动作是十分重要的技能之一。 #### 高级特性:面向对象编程及内置API应用 随着技术水平不断提高,在实际项目开发过程中还会涉及到更多高级主题——比如使用`call()`、`apply()` 和 `bind()` 方法调整执行上下文环境;或是借助浏览器提供的Web API完成异步请求等复杂任务[^3]。熟悉这类工具能够显著提升工作效率并增强解决问题的能力。 为了更好地支持上述各个层次的学习需求,建议访问官方站点获取最新版教材或参与线上直播课堂交流互动。此外也可以参考其他开源社区分享的教学材料作为补充参考资料。 ```javascript // 示例代码展示 call(), apply() 的用法 function greet(greeting, punctuation) { console.log(`${greeting} ${this.name}${punctuation}`); } const person = {name: 'Alice'}; greet.call(person, 'Hi', '!'); // 输出 "Hi Alice!" greet.apply(person, ['Hello', '.']); // 输出 "Hello Alice." ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值