Javascript中this的一些简单理解

什么是this?

this是JavaScript中的一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。this实际是在函数被调用时才发生的绑定,也就是说this具体指向什么,取决于你是怎么调用的函数。

this的四种模式

1.默认绑定

这是函数最通常的用法,func()是直接调用的(独立函数调用),没有应用其他的绑定规则,这里进行了默认绑定,将全局对象绑定this上,因此this就代表全局对象Global

var name = '贝吉塔'
var func = function {
    console.log(this.name)
}

func()   //贝吉塔

注意:在严格模式下,全局对象将无法使用默认绑定,即执行会报undefined的错误

var name = '贝吉塔'
var func = function {
    "use strict";   //开启严格模式
    console.log(this.name)
}

func()   //undefined

2.隐式绑定

作为对象的方法调用,该对象即为调用上下文,this指向该对象

var name = '贝吉塔'
var func = function {
    console.log(this.name)
}

var obj = {
    name:'卡卡罗特',
    func: func,
    anotherObj: {
        name: '魔人布欧',
        func: func
    }
}

obj.func()   //卡卡罗特
obj.anotherObj.func() //魔人布欧

 3.new绑定

作为构造函数调用,构造函数试图初始化这个新创建的对象,并将这个对象作为其调用上下文,this 指向这个新创建的对象

var name = '贝吉塔'

function Func() {
    this.name = '卡卡罗特'
    console.log(this.q)
}

var obj = new Func  //卡卡罗特

console.log(this.q)  //贝吉塔

4.显式绑定

通过函数的call/apply方法间接调用, call/apply方法的第一个参数是调用上下文,在函数体内,通过this获得对它的引用

var name = '贝吉塔'

function func() {
 console.log(this.name)
}

var obj = {
 name:'卡卡罗特'
}

func.apply()  //贝吉塔
func.call() //贝吉塔

func.apply(obj) //卡卡罗特
func.call(obj) //卡卡罗特

优先级

new绑定>显式绑定>隐式绑定>默认绑定

箭头函数(ES6语法)

ES6中的箭头函数。通过“=>”而不是function创建的函数,叫做箭头函数。它的this绑定取决于外层(函数或全局)作用域。

//普通函数

function foo(){     
    console.log( this.name );
}

var name = '贝吉塔';

var obj = { 
    name: '卡卡罗特',
    foo: foo 
};

obj.foo(); // 卡卡罗特
//箭头函数

var foo = () => {     
    console.log( this.name );
}

var name = '贝吉塔';

var obj = { 
   name: '卡卡罗特',
    foo: foo 
};

obj.foo(); //贝吉塔
foo.call(obj); //贝吉塔 ,箭头函数中显示绑定不会生效

本人水平十分有限,内容若有错误,欢迎指正!

本文借鉴了很多前辈博客的思路,非常感谢大佬们的无私共享!

猜你喜欢

转载自blog.csdn.net/nxcniuxiangchen/article/details/120348381