• 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
  • 相关阅读:
    ACS 20070108 更新
    道德沦丧 还是意识淡薄
    Alienwave.CommunityServer 20070103 更新
    无题
    《白马啸西风》之李文秀
    突然感觉自己像拉皮条的
    数据库日志文件(x.ldf)如何打开?
    调试.NET出错
    老大离开南京了
    最近太任性了
  • 原文地址:https://www.cnblogs.com/Catherine001/p/7239511.html
Copyright © 2020-2023  润新知