zoukankan      html  css  js  c++  java
  • js中的call()与apply()

    js中的call()函数和apply()函数:

    1、主要作用:是用于指定作用域和传参

    (1)用于指定作用域 

     1  window.color = "red";
     2  var o = { color: "blue" };
     3  var sayColor = function () {
     4  debugger;
     5  alert(this.color);
     6   }
     7  sayColor();
     8 
     9  sayColor.apply(this);//undefinded
    10  sayColor.apply(window);//red
    11  sayColor.apply(o);//blue

    (2)用于传参

     1   that = this;
     2   var sum = function (n1, n2) {
     3   debugger;
     4   this.n1 = n1;
     5   this.n2 = n2;
     6   return this.n1 + this.n2;
     7 }
     8   var applySum1 = function (n1, n2) {
     9   that.aaaaa = function () { };
    10   return sum.apply(that, arguments); ///that都是windown
    11 }
    12   var applySum2 = function (n1, n2) {
    13   that.bbbbb = function () { };
    14   return sum.apply(that, [n1, n2]); ///that都是windown
    15 }
    16   var callSum = function (n1, n2) {
    17   that.ccccc = function () { };
    18   return sum.call(that, n1, n2); ///that都是windown
    19 }
    20 alert(applySum1(10, 12)); //22
    21 alert(applySum2(10, 13)); //23
    22 alert(callSum(14, 10)); //24    

    2、apply()与call()解析

      apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性.

     Function.apply(obj,args)方法能接收两个参数
    obj:这个对象将代替Function类里this对象
    args:这个是数组,它将作为参数传给Function(args-->arguments)

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

      Function.call(obj,n1,n1,...);

    3、apply()巧用

    (1)Math.max 可以实现得到数组中最大的一项

    因为Math.max 参数里面不支持Math.max([param1,param2]) 也就是数组

    但是它支持Math.max(param1,param2,param3…),所以可以根据刚才apply的那个特点来解决 var max=Math.max.apply(null,array),这样轻易的可以得到一个数组中最大的一项(apply会将一个数组装换为一个参数接一个参数的传递给方法)

     这块在调用的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,我只需要用这个方法帮我运算,得到返回的结果就行,.所以直接传递了一个null过去。

    1  var arg = [5, 2, 1, 6, 8];
    2  var max = Math.max.apply(null, arg);
    3  var min = Math.min.apply(null, arg);
    4  alert("max:" + max + "---min:" + min);

    结果:max:8---min:1

    (2)Math.min  可以实现得到数组中最小的一项

    同样和 max是一个思想 var min=Math.min.apply(null,array);

    (3)可以将两个数组合并

    1  var ar1 = [1, 2, 5];
    2  var ar2 = [5, 7, 9];
    3  ar1.push.apply(ar1, ar2);//ar1=[1,2,5,5,7,9]

    而ar1.push(ar2);//结果ar1=[1,2,5,[5,7,9]]

  • 相关阅读:
    php中获取各种路径
    大型网站系统架构演化之路
    404、500、502等HTTP状态码介绍
    Linux 查看进程和删除进程
    mysql中FIND_IN_SET的使用方法
    PHP导出Excel 数字末尾变0或小数点解决办法
    PHP API接口测试小工具
    要慎用mysql的enum字段的原因
    mysql 导入&导出sql文件
    Linux下php安装memcache扩展
  • 原文地址:https://www.cnblogs.com/dean-Wei/p/4031630.html
Copyright © 2011-2022 走看看