zoukankan      html  css  js  c++  java
  • call、apply和bind的学习

    相似之处:
    1、都是用来改变函数的this对象的指向的。
    2、第一个参数都是this要指向的对象。
    3、都可以利用后续参数传参。

      var xw = {  name : "小王",gender : "男" age : 24, say : function() {console.log(this.name + " , " + this.gender + " ,今年" + this.age); }         

      var xh = {  name : "小黄" ,gender : "女", age : 18 }               

    调用xw.say(); //这个简单 打印出:小王,男,今年24

    那么如何用xw的say方法来显示xh的数据呢。这时候就可以用到call、apply、bind

    xw.say.call(xh);  //这时打印的就是:  小黄,女,今年18

    xw.say.apply(xh);

    xw.say.bind(xh)();

    这三句返回一样;

     bind比call和apply多了(),所以bind返回函数需要自己再执行调用一次,而bind和call都是对函数的直接调用;

    接下来我们看一下call和apply的区别:

      var xw = {  name : "小王",gender : "男" age : 24, say : function(city,school) {console.log(this.name + " , " + this.gender + " ,今年" + this.age+',在'+city+school); }         

      var xh = {  name : "小黄" ,gender : "女", age : 18 }      

    方法里带多个参数,

    xw.say.call(xh,'厦门','双十中学');

    xw.say.apply(xh,['厦门','双十中学']);

    xw.say.bind(xh,'厦门','双十中学')();  //小黄,女,今年18,在厦门双十中学

    或者xw.say.bind(xh)('厦门','双十中学');

     没带参数则是underfind;

    这里call和apply的区别主要在于带参的形式,可以记住apply是以array数组形式都是,和call是...arg形式,bind和call一样;

  • 相关阅读:
    动态代理有啥用(总结)
    ES6随笔--各数据类型的扩展(4)--数组和对象
    ES6随笔--各数据类型的扩展(2)--数值
    ES6随笔--各数据类型的扩展(1) --字符串和正则
    ES6随笔--声明变量
    CommonJS随记
    DOM练习小记--一个简单的Web页面游戏
    js随笔--关于事件
    js随笔--关于this
    js随笔--循环里的弯弯绕
  • 原文地址:https://www.cnblogs.com/wangxiaoer5200/p/11981063.html
Copyright © 2011-2022 走看看