this

Posted wss521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了this相关的知识,希望对你有一定的参考价值。

this:执行上下文,this一般存在于函数中,表示当前函数的执行上下文,如果函数没有执行,那么this没有内容,只有函数在执行后this才有绑定

1.默认执行:fn(): 全局作用域或者普通函数中this指向window,严格模式指向undefined

例子:  function fn(){

      "use strict"
      console.log(this)
      }
      fn()

2.通过对象执行(通过上下文对象执行,隐式执行)

 

function fn(){
console.log(this)
}
var a = 10;
var obj = {
a:20,
b:fn
}
obj.b();

var obj2 = {
a:30,
b:obj.b
}

3.显式执行(通过函数的方法bind执行):指定的是谁,就是谁
function fn(){
console.log(this)
}
var f = fn.bind(123);
f();

 找回隐式丢失的this,其实就是使用显式执行,强行绑定
setTimeout(obj.b.bind(obj), 3000);

 

 谁执行了this所在的函数,this就是谁

 场景:
 1.默认执行:非严格模式下指向window
  window || undefined
 2.隐式执行:通过任意对象执行
   直接的执行对象
 3.显式执行:通过函数的bind或call或apply执行
   写谁就谁

 

function fn(){
console.log(this)
}
var obj = {}
obj.fn = fn;

obj.fn();         //obj

var obtn = document.getElementById("btn");
obtn.onclick = fn;
     点击时          //obtn

fn.bind("hello")();       //"hello"

var f = fn.bind(obj);
f();        //obj

fn();              //window


4.构造函数执行(通过new执行)   



 

 

以上是关于this的主要内容,如果未能解决你的问题,请参考以下文章

前端面试-闭包和作用域

请求拦截 XMLHttpRequest和fetch

构造函数

Vue中的$set的使用

this与super

java-this使用