• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > JavaScript中call,apply,bind方法的总结

JavaScript中call,apply,bind方法的总结

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含call,apply,bind等相关知识,匿名希望在学习及工作中可以帮助到您
  why?call,apply,bind干什么的?为什么要学这个?

1108.JPG

  一般用来指定this的环境,在没有学之前,通常会有这些问题。

var a = {
    user:"追梦子",
    fn:function(){
        console.log(this.user);
    }
}
var b = a.fn;
b(); //undefined


  我们是想打印对象a里面的user却打印出来undefined是怎么回事呢?如果我们直接执行a.fn()是可以的。

var a = {
    user:"追梦子",
    fn:function(){
        console.log(this.user);
    }
}
a.fn(); //追梦子

  这里能够打印是因为,这里的this指向的是函数a,那为什么上面的不指向a?我们如果需要了解this的指向问题,请看彻底理解js中this的指向,不必硬背这篇文章。

  虽然这种方法可以达到我们的目的,但是有时候我们不得不将这个对象保存到另外的一个变量中,那么就可以通过以下方法。


  1、call()

var a = {
    user:"追梦子",
    fn:function(){
        console.log(this.user); //追梦子
    }
}
var b = a.fn;
b.call(a);

  通过在call方法,给第一个参数添加要把b添加到哪个环境中,简单来说,this就会指向那个对象。


  call方法除了第一个参数以外还可以添加多个参数,如下:

var a = {
    user:"追梦子",
    fn:function(e,ee){
        console.log(this.user); //追梦子
        console.log(e+ee); //3
    }
}
var b = a.fn;
b.call(a,1,2);

  2、apply()


  apply方法和call方法有些相似,它也可以改变this的指向

var a = {
    user:"追梦子",
    fn:function(){
        console.log(this.user); //追梦子
    }
}
var b = a.fn;
b.apply(a);

  同样apply也可以有多个参数,但是不同的是,第二个参数必须是一个数组,如下:

var a = {
    user:"追梦子",
    fn:function(e,ee){
        console.log(this.user); //追梦子
        console.log(e+ee); //11
    }
}
var b = a.fn;
b.apply(a,[10,1]);


  或者

var a = {
    user:"追梦子",
    fn:function(e,ee){
        console.log(this.user); //追梦子
        console.log(e+ee); //520
    }
}
var b = a.fn;
var arr = [500,20];
b.apply(a,arr);


  //注意如果call和apply的第一个参数写的是null,那么this指向的是window对象

var a = {
    user:"追梦子",
    fn:function(){
        console.log(this); //Window {external: Object, chrome: Object, document: document, a: Object, 
        speechSynthesis: SpeechSynthesis…}
    }
}
var b = a.fn;
b.apply(null);

  3、bind()

  bind方法和call、apply方法有些不同,但是不管怎么说它们都可以用来改变this的指向。


  先来说说它们的不同吧。

var a = {
    user:"追梦子",
    fn:function(){
        console.log(this.user);
    }
}
var b = a.fn;
b.bind(a);


  我们发现代码没有被打印,对,这就是bind和call、apply方法的不同,实际上bind方法返回的是一个修改过后的函数。

var a = {
    user:"追梦子",
    fn:function(){
        console.log(this.user);
    }
}
var b = a.fn;
var c = b.bind(a);
console.log(c); //function() { [native code] }


  那么我们现在执行一下函数c看看,能不能打印出对象a里面的user

var a = {
    user:"追梦子",
    fn:function(){
        console.log(this.user); //追梦子
    }
}
var b = a.fn;
var c = b.bind(a);
c();


  ok,同样bind也可以有多个参数,并且参数可以执行的时候再次添加,但是要注意的是,参数是按照形参的顺序进行的。

var a = {
    user:"追梦子",
    fn:function(e,d,f){
        console.log(this.user); //追梦子
        console.log(e,d,f); //10 1 2
    }
}
var b = a.fn;
var c = b.bind(a,10);
c(1,2);


  总结:call和apply都是改变上下文中的this并立即执行这个函数,bind方法可以让对应的函数想什么时候调就什么时候调用,并且可以将参数在执行的时候添加,这是它们的区别,根据自己的实际情况来选择使用。


以上就是JavaScript中call,apply,bind方法的总结的内容,更多相关内容请关注微课江湖()!

您可能想查找下面的文章:

  • JavaScript中call,apply,bind方法的总结

相关文章

  • 2018-12-03使用phonegap对联系人进行查找的方法
  • 2017-08-06在IE6系列等老式浏览器中使用HTML5的新标签实现方案
  • 2018-12-03HTML5的结构和语义(4):语义性的内联元素_html5教程技巧
  • 2018-12-03HTML5 会不会成为移动互联网的未来趋势,取代 App?
  • 2018-12-03混合移动开发框架详解
  • 2018-12-03基于HTML标签marquee实现滚动效果的简单方法
  • 2018-12-03HTML5中垂直上下居中的解决方案
  • 2017-08-06浅析border-radius如何兼容IE
  • 2018-12-03HTML页面中添加Canvas标签示例_html5教程技巧
  • 2018-12-03移动站如何使用?总结移动站实例用法

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • html5移动端Meta的设置
    • html5如何使用canvas画空心圆与实心圆
    • 25岁如花的年纪自学前端是明智的选择么? 这几天正犹豫要不要辞职,希望知友能给点意见,先行谢过?
    • html5 frameset标签的替代方案是什么?frameset标签替代的解决办法
    • 详解HTML5通讯录获取指定多个人的信息
    • HTML5 Canvas中绘制一个像素宽的细线实现代码详情
    • 浅谈HTML5新增及移除的元素
    • 整理的15个非常有用的 HTML5 开发教程和速查手册_html5教程技巧
    • Cordova 如何实现所有的h5html 来自于远程服务器呢?
    • html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有