zoukankan      html  css  js  c++  java
  • 浅谈JavaScript的apply和call语句

    我们试图在回调函数中,用this表示oDiv对象,这样感觉爽。

    1    animate(oDiv,{"left":600},2000,function(){

    2        this.style.backgroundColor = "red";

    3    });

    但是不行,回调函数中this不是oDiv。

    所以我们现在要想一个办法,让callback运行,并且callback里面的this是oDiv。

    1    callback.call(elem);

    或者:

    1    callback.apply(elem);

    执行callback函数,并且让callback函数中的this关键字为elem。

    例子:

    1            var obj2 = {

    2                 "name" : "树懒",

    3                 "age" : 16,

    4                 "sex" : "男"

    5            }

    6     

    7            function xianshixinxi(){

    8                 alert(this.name);

    9            }

    10    

    11           //下面这个call语句的含义有两层:

    12           //1. xianshixinxi函数将被调用

    13           //2. 同时这个函数内部的this就是obj了

    14           xianshixinxi.call(obj2);

    说白了apply、call功能是一样的,功能都是:让函数调用,并且给函数设置this是谁。

    call就是英语呼叫的意思,apply是应用的意思。

    现在说说区别:

    1            var obj = {

    2                 "name" : "考拉",

    3                 "age" : 18,

    4                 "jiehun" : false

    5            }

    6     

    7     

    8            function xianshixinxi(a,b,c){

    9                 console.log(this.name);

    10                console.log(a + b + c);

    11           }

    12    

    13           xianshixinxi.call(obj,2,3,4);

    14           xianshixinxi.apply(obj,[2,3,4]);

    call和apply功能一样,就是让一个函数里面的this设置为一个对象。

    拿上例来说,xianshixinxi函数里面的this就是obj对象。但是我们发现,xianshixinxi这个函数,有参数。那么我们现在又想设置this是谁,又想把参数往里传,此时就有区别了:

    1    fn.call(obj,参数1,参数2,参数3……);

    1    fn.apply(obj,[参数1,参数2,参数3……]);

    call需要你用逗号罗列所有参数,但是apply是把所有参数写在数组里面。即使只有一个参数,也必须写在数组里面。

    比如:

    1            function showInfo(n){

    2                 for(var i = 1 ; i <= n ; i++){

    3                     console.log(this.name);

    4                 }

    5            }

    6            showInfo.call(obj,10);

    7            showInfo.apply(obj,[10]);

    一定不要记混,apply要的是数组,你想啊,ly、ly、ly长得像list,就是数组。

    总结一下,这两个东西功能一致,就是把一个函数里面的this设置为某个对象。区别就是后面的参数的语法。

     

  • 相关阅读:
    大学生程序猿IT情书“2014爱的告白挑战赛”获奖名单及优秀情书展示系列之
    HDU 4952 Poor Mitsui(贪心)
    linux-CentOS6.4安装Memcached+memcached扩展+安装memcache扩展+Memcache+mecached同步SESSION的几种方法
    POJ 1006 Biorhythms(中国剩余定理 )
    java多线程实验 滚动字
    学习鸟哥的Linux私房菜笔记(17)——Linux引导流程
    PCI的imagework已由freeview软件代替
    小强的HTML5移动开发之路(26)—— JavaScript回顾1
    小强的HTML5移动开发之路(25)—— AppCan开发环境
    小强的HTML5移动开发之路(24)—— PhoneGap Android开发环境搭建
  • 原文地址:https://www.cnblogs.com/xiao-song/p/5846875.html
Copyright © 2011-2022 走看看