zoukankan      html  css  js  c++  java
  • call/apply以及this指向的理解

      javascript是面向对象的语言,Function也是一种对象,有自己的属性和方法。call和apply就是js函数自带方法,挂在Fucntion.prototype上。

      一般调用某函数时,直接“函数名(参数)”的写法即可,函数内部的this指向函数的调用者。

    function add(a,b){
        console.log(this);
        return a+b;
    }
    add(1,2)   // 默认window调用,this指向window
    
    var math = {
        add:function(a,b){
            console.log(this);
            return a+b;
        }
    }
    math.add(1,2)  // this指向math
    

      call和apply的作用是给函数重新指定调用者,指定this的指向:

    var name = "WINDOW";
    var someone = {
        name: "yource"
    };
    
    /** 一般写法 **/
    function greet1(person) {
        var reply = "Hello, " + person.name;
        console.log(reply)
    }
    
    greet1(someone);  // Hello, yource
    
    /** 使用call/apply **/
    function greet2() {
        var reply = "Hello, " + this.name;
        console.log(reply)
    }
    
    greet2();  // Hello, WINDOW
    greet2.call(someone);   // Hello, yource
    greet2.apply(someone);  // Hello, yource

      call和apply的不同之处仅在于提供参数的方式:call使用一组参数列表,apply使用参数数组。

    /*apply()方法*/
    function.apply(thisObj[, argArray])
    
    /*call()方法*/
    function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);
    

      apply最多只能有两个参数:调用者thisObj和一个数组argArray。call可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。

  • 相关阅读:
    造出最好的 CMS 轮子
    搭建开发框架Express,实现Web网站登录验证
    QueryOver<T>
    NVelocity
    .NET 相依性注入
    Unity 3.5
    java socket 的参数选项解读(转)
    换种方式去分页(转)
    上海市居住证办理材料及流程
    java动态代理
  • 原文地址:https://www.cnblogs.com/yangshifu/p/9761388.html
Copyright © 2011-2022 走看看