美文网首页
js的this指向总结

js的this指向总结

作者: 香蕉不拿呢 | 来源:发表于2022-01-14 16:37 被阅读0次
this对象

js严格模式下没有window

一、普通函数
  • 非严格模式 普通函数全局调用和局部调用都是指向window
  • 严格模式 严格模式下没有window,this为undefined
1.非严格模式
function Afun(){
    console.log(this)
}
Afun() // window

function Bfun(){
    function Cfun(){
        console.log(this)
    }
    Cfun()
}
Bfun()  // window
2.严格模式
"use strict";
function Afun(){
    console.log(this)
}
Afun() // undifined

function Bfun(){
    function Cfun(){
        console.log(this)
    }
    Cfun()
}
Bfun()  // undifined
二、匿名函数

匿名函数this指向window

(function(){
    console.log(this)   // window
})()
三、构造函数

构造函数this指向新创建的实例对象

function Afun(){
    this.name = 'Afun'
}
let B = new Afun()
console.log(B.name)  // Afun
四、对象里面的方法

this取决于直接调用该方法的对象

var name = 'window'
var obj = {
    name:'obj',
    fun1:function(){
        console.log(this.name)
    },
    fun2:function(){
        return function Bfun(){
            console.log(this.name)
        }
    }
}
var fun1 = obj.fun1;
obj.fun1();     // obj
obj.fun2()();   // window
fun1()  // window
五、call/apply/bind函数

改变函数的this指向。如果传undefined/null进去,this为window

let A = {
    name:'A',
    getName:function(){
        console.log(this.name)
    }
}
let B = {
    name :'B'
}
A.getName()     // A
A.getName.call(B) // B
六、事件函数

this指向事件对象

let el = document.createElement("a")
el.text = '我是a标签'
el.onclick= function(e){
    console.log(this)
}
el.click()  // <a>我是a标签</a> 
七、定时器

定时器this指向window

setTimeout(function(){
    console.log(this)   // window
}, 100);
八、箭头函数

箭头函数没有自己的this,始终等于外层上下文的this

var name = 'window'
var obj = {
    name : 'obj',
    getName : function(){
        console.log(this.name)
    },
    getName2 : ()=>{
        console.log(this.name)
    },
    getName3 : function(){
        return ()=>{
            console.log(this.name)
        }
    },
    getName4 : ()=>{
        return ()=>{
            console.log(this.name)
        }
    },
    getName5 : ()=>{
        return function(){
            console.log(this.name)
        }
    }
}

obj.getName()   // obj
obj.getName2()  // window
obj.getName3()() // obj
obj.getName4()() // window
obj.getName5()() // window

相关文章

  • js的this指向总结

    this对象 js严格模式下没有window 一、普通函数 非严格模式 普通函数全局调用和局部调用都是指向wind...

  • js中的this指向问题小结

    最近有点闲暇时间,就来总结js中this的指向问题,如有不对,请指出。this指向,网上做多的描述是指向那个最终调...

  • 总结js中的this指向问题

    一、js默认绑定 在全局声明的对象或者函数都会被认为是window对象下的,这时候默认this是绑定到全局作用域下...

  • JS进阶篇-this指向问题

    JS中this的指向问题不同于其他语言,JS中的this不是指向定义它的位置,而是在哪里调用它就指向哪里。 JS中...

  • js的this指向

    参考文章:1.彻底理解js中this的指向,不必硬背https://www.cnblogs.com/pssp/p/...

  • JS this指向

    一、js中的四种调用模式s 构造函数调用:new Foo(); 对象方法调用:o.method(); 函数直接调用...

  • js this指向

    this指向调用该函数的对象 在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不...

  • JS this指向

    首先,请牢记以下三点1. this指向的,只可能是对象!2.this指向谁,不取决于this写在哪!而是取决于函数...

  • JS this指向

  • this的用法详解

    js中this的用法比较杂乱,这里总结一下。 一:全局作用域中this指向window对象。 var number...

网友评论

      本文标题:js的this指向总结

      本文链接:https://www.haomeiwen.com/subject/gsnacrtx.html