zoukankan      html  css  js  c++  java
  • [转]JS中apply和call的联系和区别

    JS中有时常用到 apply 和 call 两个方法,搜索网上很多,整理如下,简单看看这两个联系和区别,

    联系:

    网上查到关于apply和call的定义:这两个方法都能劫持另外一个对象的方法,继承另外一个对象的属性.

    xxxFunction.apply(obj,args) 方法接收两个参数
    obj
    :这个对象将代替xxxFunction类里this对象,也即xxxFunction类(函数)里的this不在是指 xxxFunction 本身,而是obj;
    args:这个是数组类型的参数,它将作为参数传给Function(args --> arguments)
    结果是还是执行 xxxFunction 类方法(函数)的功能,只不过该 xxxFunction 函数以另一个目标对象和一个数组作为参数传递进 xxxFunction 函数,xxxFunction函数里面的 this 是传进的目标对象,二不是 xxxFunction 本身;

    call:和apply类似的,只不过是参数列表不一样.

    xxxFunction.call(obj,[param1[,param2[,...[,paramN]]]])
    obj
    :这个对象将代替xxxFunction类里this对象,(跟apply中的obj一样);
    params:这个是一个参数列表(即逗号隔开的零个或多个参数),不是数组;
    结果是还是执行 xxxFunction 类方法(函数)的功能,只不过该 xxxFunction 函数以另一个目标对象和一个参数列表[即用逗号隔开的零或多个参数]作为参数传递进 xxxFunction 函数,xxxFunction函数里面的 this 是传进的目标对象,二不是 xxxFunction 本身;

    区别:
    用法上不同,主要是参数不完全同

    举例:

    function Person(name,age) {  
    this.name=name;  
    this.age=age;  
    this.money = 500;
    } 
    
    function myFun(money) {		
    	alert(this.money);
    }
    
    var money = 100;
    myFun(money); 
    //return 100;  //window.myFun(money); save to myFun(money);
    //这个时候this指向的是window对象,其实myFun函数和定义的var money = 100;都作为window对象子对象(即全局对象)
    
    myFun.apply(window,[]);  //save to window.myFun.apply(window,[]);  
    //return 100;  //同上
    
    myFun.apply(new Person('zhangsan',23),[]);  
    //return 500, 空数组作为参数,仅符合语法要求
    //这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500
    
    myFun.call(new Person('zhangsan',23),money,300,'mycardId');  
    //return 500, 后面money,300和mycardId是参数列表作为参数,一一列出
    //这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500
    


    更多妙用可参考: http://blog.csdn.net/myhahaxiao/article/details/6952321 ,更多参考网上搜索

  • 相关阅读:
    一行代码搞定Dubbo接口调用
    测试周期内测试进度报告规范
    jq 一个强悍的json格式化查看工具
    浅析Docker容器的应用场景
    HDU 4432 Sum of divisors (水题,进制转换)
    HDU 4431 Mahjong (DFS,暴力枚举,剪枝)
    CodeForces 589B Layer Cake (暴力)
    CodeForces 589J Cleaner Robot (DFS,或BFS)
    CodeForces 589I Lottery (暴力,水题)
    CodeForces 589D Boulevard (数学,相遇)
  • 原文地址:https://www.cnblogs.com/simonbaker/p/4235229.html
Copyright © 2011-2022 走看看