this指向JS

this指向

  1. 函数预编译过程this -->window

    function test () {
        console.log(this);
    }
    test();//此时输出:window这个对象

  2. 全局作用域里this-->window

  3. call/apply 可以改变函数运行时this指向

    function Person (name, age) {
        this.name = name;
        this.age = age;
    }
    var person = new Person()
    var obj = {
        
    }
    Person.call(obj,"wu",20);//改变this指向,相当于在Person函数中顶部新增(this = obj),而后面两个是传入的参数
    //实际上: Person() === person.call()
    //此时;obj = {
    //		name: "wu",
    //		age: 20
    //}
    Person.apply(this,[age,name]);
    //这里只是有细微的差别,就是传参,apply第二个参数是一个实参数组
    

  4. obj.func(): func()里面的this指向obj

    var obj = {
        a: function () {
            console.log(this.name)
        },
        name: "li"
    }
    obj.a();//输出:li----简言之谁调用this指向谁

  • 练习

    1. var name = "quan"
      var a = {
          name: "obj",
          say: function () {
              cosnolr.log(this.name);
          }
      }
      var fun = a.say;
      fun();//输出:"quan"
      a.say();//输出:"obj"
      ​
      //究极版
      var b = {
          name: "objb",
          say: function (func) {
              func();
          }
      }
      b.say(a.say);//输出:"quan" ---- 这里是因为b.say()--这个函数是用来执行里面的函数func(),
                   //而func()执行时前面并没有由谁来调用---所以这里是走预编译环节this指向window
      b.say = a.say;
      b.say()//输出:objb

      对于this指向特别注意是谁调用了该函数

    2. var bar = {a: "02"};
          function print () {
              bar.a = "a";
              Object.prototype.b = "b";
              return function inh () {
                  console.log(bar.a);
                  console.log(bar.b);
              }
          }
          print()();//输出:a,b;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值