• JS中的call()和apply()方法


    一、方法定义

    1、call()

    语法:call(thisObj, Object)
    定义:调用一个对象的一个方法,以另一个对象替换当前对象。
    说明:
    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

    2、apply()

    语法:apply(thisObj, [argArray])
    定义:应用某一对象的一个方法,用另一个对象替换当前对象。
    说明:
    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

    二、常用实例

    1、function add(a,b){  
               alert(a+b);  
        }  
        function sub(a,b){  
            alert(a-b);  
        }  
        add.call(sub,3,1);//4

    2、var func=new function(){
              this.a="func"
        }
        var myfunc=function(x){
            var a="myfunc";
            alert(this.a);
            alert(x);
        }
        myfunc.call(func,"var");//func var    开始this指向myfunc,用call()方法后,this指向func

    3、<input type="text" id="myText" value="input text">

    function Obj(){
            this.value="对象!";
        }
        var value="global 变量";
        function Fun1(){
            alert(this.value);
        }

        window.Fun1(); //global 变量   等价于Fun1(); this指向window
        Fun1.call(window); //global 变量
        Fun1.call(document.getElementById('myText')); //input text
        Fun1.call(new Obj()); //对象!

    4、 function Animal(){    
            this.name = "Animal";    
            this.showName = function(){    
                alert(this.name);    
            }    
          }   
          function Cat(){    
             this.name = "Cat";    
          }      
          var animal = new Animal();    
          var cat = new Cat();    
          //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。    
          //输入结果为"Cat"    
          animal.showName.call(cat,",");    
         //animal.showName.apply(cat,[]);

     

  • 相关阅读:
    VisualVM工具的使用
    jstack的使用
    JVM内存溢出的定位与分析
    初识JVM
    JVM运行参数
    VIM 常用命令
    python3 简单抓取图片2
    python3 抓取图片
    node.js GET 请求简单案例
    node.js 爬虫
  • 原文地址:https://www.cnblogs.com/happybread/p/7569463.html
Copyright © 2020-2023  润新知