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

    this指针总是指向一个对象,大致可以分为以下四种:

    1,作为对象的方法调用(this指向该对象)

    2,作为普通函数调用

        当函数不作为对象的属性被调用时,也就是普通函数方式,此时的this总是指向全局对象。在浏览器的javascript中,全局对象就是windows。 

    1 window.name='globaiName';
    2 var getName=function(){
    3     return this.name;
    4 };
    5 console.log(getName());
    this指向全局对象

    3,构造器调用

       javascript中没有类,但是可以从构造器中创建对象,同时也提供了new运算符,使得构造器看起来更像一个类。

       当用new运算符调用函数时,该函数总会返回一个对象,通常,构造器里的this就指向返回的这个对象

    var MyClass(){
      this.name='sven';
    };
    var obj=new MyClass();
    alert(obj.name);
    构造器里的this

      但是如果构造器显示的返回了一个object类型的对象,那么结果最终会返回这个对象。

    var MyClass(){
      this.name='sven';
      return {                     //显示返回一个对象
       name:'anne';
    }
    };
    var obj=new MyClass();
    alert(obj.name);            //输出anne                            
    构造器显示返回object类型对象

    4,Function.prototype.call  和 Function.prototype.apply

      每个函数都具有call()和apply()方法,他们的作用一样,区别在于传入参数的形式不同。

      apply接受两个参数,第一个参数指定了函数体内this对象的指向,第二个参数作为一个带下标的集合,可以是数组,也可以是类数组。

      call传入的参数数量不固定,第一个参数指定了函数体内this对象的指向,从第二个参数开始,每个参数被依次传入函数。

      如果我们传入的第一个参数是null时,函数体内的this会指向默认的宿主对象,在浏览器中就是window。

    1 document.getElementById = (function (func){
    2      return function(){
    3         return func.apply(document,arguments);
    4 }
    5 })(document.getElementById);
    6 var getId = document.getElementById;
    7 var div = getId('div1');
    8 alert(div.id);                            //输出div1
    用apply来修正this指向
  • 相关阅读:
    python 操作 mysql 数据库 datetime 属性字段为 0000-00-00 00:00:00 的问题
    git 学习笔记
    SB Admin 2 学习笔记1
    docker容器与容器云读书笔记1
    urlencode遇到中文编码问题
    flask_sqlalchemy 乱码问题
    centos6u3 安装 celery 总结
    flask_sqlalchemy 命名遇到的一个小坑
    使用 bash 创建定时任务
    tornado 异步调用系统命令和非阻塞线程池
  • 原文地址:https://www.cnblogs.com/hsprout/p/5063203.html
Copyright © 2011-2022 走看看