zoukankan      html  css  js  c++  java
  • js------this关键字

    在js中this可以是全局对象、当前对象或者其他对象,在一段代码中this指的是什么? ——看函数的调用方式,谁调用了它就指的是谁

    函数的调用方式:一般函数、对象方法、构造函数、绑定(apply/call/bind)、

    1.一般函数:

    x=1;
    function test(){
        this.x=2;
    }
    test();
    console.log(x);//2

    函数为此时this指为全局对象

    2.对象方法:

    var a="mm";
    var test={
        a:"nn",
        fn:function(){
            console.log(this.a);
        }
    }
    test.fn();//nn

    此时的this指向调用的对象test

    这里有一点是,分清调用的对象,下面这个tt()调用时调用的是全局对象:

     function fn() {
         console.log( this.a );
      }
     var obj = {
          a: 2,
         fn: fn
     };
    obj.fn();//2
    var tt = obj.fn; a = "3"; tt(); //3

    3.构造函数:

    function Test(){
        this.a="hi ";
        this.fn = function(str){
            console.log(this.a+str)
        }
    }
    var test = new Test();
    test.fn("sun");//hi  sun

    test是构造函数Test的一个实例,通过this,可以使构造函数的实例访问到其构造函数的属性或者方法(类似为公共的)

     4.applycallind    是改变函数的调用对象

    apply方法的第一个参数为改变后调用这个函数的对象,this指代第一个参数,如果为空,则表示全局,第二个参数必须是一个数组

    call方法与apply相似,但第二个参数是不同的,可以添加多个参数

    bind方法第一个参数为调用的对象,返回的是一个修改过后的函数,可以添加多个参数。

    var a = {
        name:"mery",
        fn:function(){
            console.log(this.name);
        }
    }
    name="sun";
    var b = a.fn;
    b.apply(a);//mery
    b.apply();//sun   因为第一个对象为空,默认全局变量
    b.call();//sun   因为第一个对象为空,默认全局变量
    b.bind(a);//没有任何值
    b.bind(a)();//mery
    b.bind()();//sun
  • 相关阅读:
    弱省胡策 Magic
    CF917D Stranger Trees
    【弱省胡策】Round #5 Count
    【BZOJ2117】 [2010国家集训队]Crash的旅游计划
    「2017 山东一轮集训 Day5」苹果树
    【SDOI2017】天才黑客
    【JXOI2018】守卫
    小程序两种图片加载方式
    小程序之底部栏设计
    小程序之全局变量的设置及使用
  • 原文地址:https://www.cnblogs.com/Catherine001/p/7239511.html
Copyright © 2011-2022 走看看