Java教程

javascript中this的指向

本文主要是介绍javascript中this的指向,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

this是指当前程序的运行环境,如果在函数中, 指代函数的运行环境。

一般可以分成四类

    • 函数调用方式;alert('Hello World!')
    • 方法调用方式;console.log('Hello World!')
    • 构造函数方式;new RegExp('\\d')
    • 间接调用方式(apply/call);alert.call(undefined, 'Hello World')

1:全局变量默认挂载在window对象下

2:一般情况下this指向它的调用者

3:es6的箭头函数中,this指向创建者,并非调用者

4:通过call、apply、bind可以改改变this的指向

 

但是也有特殊情况, 相当于函数调用, this指向全局

如:

var a = 'window'
var obj = {
   a: 'in obj'
   method: function(){
         console.log('1', this);
        (function(){  console.log('2', this) })()
        return function(){
             console.log('3', this); 
        }
    }  
}    

obj.method()();

将输出: 1, in obj, 2 window, 3 window

 因为在3时,obj.method()相当于返回了函数, 是一个函数调用了, 指向全局对象。自执行函数在运行时, 也是函数调用, 指向全局作用域。

 

一般箭头函数指向定义时的上下文环境,一般是全局, 但是可以通过改变箭头函数的父级作用域, 间接的改变箭头函数的this.

var a = 'window'
var obj = {
   a: 'in obj'
   method: function(){
         console.log('1', this);
       
        return () => {
             console.log('3', this.a); 
        }
    }  
}    

obj.method()(); // 3,  in obj
obj.method.call({a: 'change parent'})(); // 3, change parent
obj.method().call({a: 'change arrow'}); // 3, in obj 

  箭头对bind, callm apply无效

这篇关于javascript中this的指向的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!