zoukankan      html  css  js  c++  java
  • js的apply 和 call

    总是没搞明白js的apply 和call,看到一篇文章+评论,终于搞明白了,记录下来

    http://uule.iteye.com/blog/1158829

    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 
    上述一个句号一个意思,体现在方向不同。第一个借用别人的函数,第二个借用别人的上下文环境。

    function add(a,b)
    {
        alert(a+b);
    }
    function sub(a,b)
    {
        alert(a-b);
    }
    
    add.call(sub,3,1);  //4
    个人理解call和apply的作用就是切换函数的对象上下文

    “这个例子中的意思是将add执行的上下文由window切换为sub,即this指向是从window变为sub。
     
    修改上述例子:
    function add(a,b)  
    {  
        this(a,b);
        alert(a+b);  
    }  
    function sub(a,b)  
    {  
        alert(a-b);  
    }  
      
    add.call(sub,3,1);  //2    4

    先打出2 然后 为4 ,可说明了:将add执行的上下文由window切换为sub,即this指向是从window变为sub。

    再附其另一例子

    function Animal(){    
        this.name = "Animal";    
        this.showName = function(){    
            alert(this.name);    
        }    
    }    
      
    function Cat(){    
        this.name = "Cat";    
    }    
       
    var animal = new Animal();    
    var cat = new Cat();    
        
    animal.showName.call(cat,",");    //cat
    //animal.showName.apply(cat,[]);

    //通过call或apply方法,将animal的执行上下文改为cat,及此时animal.showName() 中的this指向cat,所以输出结果为‘Cat’

    顺便记录下 javascript语言精粹上看到的一个例子

    用来区分数组和对象(因为js的数组其实就是对象:var a=[];typeof(a)  //"object")

    var is_array = function(value) {
        return Object.prototype.toString.apply(value) === '[object Array]';     
    };
    var a=[];Object.prototype.toString.apply(a)
    //"[object Array]"
    var a=[];a.toString()
    //""
    var a=[];Object.prototype.toString(a)
    //"[object Object]"
  • 相关阅读:
    storm中的Scheduler
    开启flume的远程调试功能
    修改flume源码,使其HTTPSource具备访问路径功能
    非功能测试——效率测试
    python100例
    awk命令
    shell正则表达式
    python的垃圾回收机制
    冯-诺伊曼体系结构
    jmeter读取文件内容做变量
  • 原文地址:https://www.cnblogs.com/xnn1993/p/7597426.html
Copyright © 2011-2022 走看看